• 桥接模式


    多层继承


      因为类的继承关系,我们在构建时,可以使用图中的方式。但是有个问题就是,当我们向图中新增加一个品牌的时候,我们要同时添加三个类。即台式机下添加xx台式机,笔记本下添加xx笔记本,平板下添加xx平板。这样维护起来比较麻烦。其主要原因是每个具体的类承担了两个角色,比如联想台式机不仅承担联想这个品牌,而且承担台式机角色。

    解决方案


    从上面的问题中我们可以观察到其实类功能有两个维度,一个是品牌维度,一个是类型维度

    我们通过桥接的方式将这个两个维度连接起来,这样的话就可以得到不同的类。而且如果需要添加一个新的类型(如手机)或新的品牌,只需要在自己的维度上添加即可。这样就避免了上面的问题因添加一个新的类型或功能而需要添加多个类的问题了。

    类图关系


    在类图关系中,可以看出桥接模式其实是通过组合的方式来实现的。Computer类持有了Brand的引用,然后在自己的内部来调用Brand的方法。

    举例


    Computer

    package com.dy.xidian;
    
    public abstract class Computer {
        protected Brand brand;
    
        public Computer(Brand b) {
            this.brand = b;
        }
    
        public void sale() {
            brand.sale();
        }
    }
    
    class Desktop extends Computer {
    
        public Desktop(Brand b) {
            super(b);
        }
    
        @Override
        public void sale() {
            super.sale();
            System.out.println("销售台式机");
        }
    }
    
    class Laptop extends Computer {
    
        public Laptop(Brand b) {
            super(b);
        }
    
        @Override
        public void sale() {
            super.sale();
            System.out.println("销售台式机");
        }
    }

    Brand接口

    package com.dy.xidian;
    
    public interface Brand {
    
        void sale();
    }
    
    class Lenovo implements Brand {
    
        @Override
        public void sale() {
            System.out.println("销售联想电脑");
        }
    }
    
    class Dell implements Brand {
    
        @Override
        public void sale() {
            System.out.println("销售戴尔电脑");
        }
    
    }

    Client类

    package com.dy.xidian;
    
    public class Clinet {
    
        public static void main(String[] args) {
            Computer c = new Laptop(new Lenovo());
            c.sale();
        }
    
    }
  • 相关阅读:
    python函数
    python3基础4
    布尔值常识
    字典常用魔法方法
    字典相关常识
    元组相关常识
    列表及其魔法方法(list类中提供的方法)
    列表相关常识
    day11练习题
    字符串相关常识
  • 原文地址:https://www.cnblogs.com/xidongyu/p/5639417.html
Copyright © 2020-2023  润新知