美文网首页
桥接模式

桥接模式

作者: Simple_a | 来源:发表于2019-03-12 23:00 被阅读0次

    场景

    商城里的电脑分类问题

    • 电脑类型:

    台式机、笔记本、平板电脑

    • 电脑品牌:

    联想、戴尔、神舟

    未使用桥接模式时的解决方式

    用多层继承结构实现


    image

    问题:

    1. 扩展性问题(类膨胀问题):

    如果要增加一个新的电脑类型:智能手机。则要增加各个品牌下面的类。

    如果要增加一个新的电脑品牌,也要增加各种电脑类型的类。

    1. 违反单一职责原则

    一个类:联想笔记本,有两个引起这个类型的原因。

    桥接模式

    场景分析(即使用桥接模式的场景):

    商城系统中常见的商品分类,以电脑为例,如何处理商品分类问题?

    分析:这个场景有两个变化的维度:电脑类型、电脑品牌


    image

    桥接模式的核心要点:

    处理多层继承结构,处理多维度变化的场景。将各个维度设计成独立的继承结构,使各个维度可以独立的扩展,在抽象层建立关联。

    类图及代码实现:

    image
    /*
     * 电脑类型基类
     * 抽象构件
     */
    public class Computer{
        private Brand brand;
        public Computer(Brand b) {
            this.brand = b;
        }
        public void sale() {
            brand.sale();
        }
    }
    /*
     * 台式机电脑
     */
    public class Desktop extends Computer{
    
        public Desktop(Brand b) {
            super(b);
        }
        public void sale() {
            super.sale();
            System.out.print("台式电脑");
        }
    
    }
    /*
     * 笔记本电脑
     */
    public class Laptop extends Computer{
    
        public Laptop(Brand b) {
            super(b);
        }
        public void sale() {
            super.sale();
            System.out.print("笔记本电脑");
        }
    
    }
    /*
     * 电脑品牌接口
     * 实现
     */
    public interface Brand {
        void sale();
    }
    /*
     * 联想电脑品牌
     */
    public class Lenovo implements Brand{
        
        @Override
        public void sale() {
            System.out.print("联想");
        }
    }
    /*
     * 戴尔电脑品牌
     */
    public class Dell implements Brand{
        
        @Override
        public void sale() {
            System.out.print("戴尔");
        }
    }
    /*
     * 客户端
     */
    public class Client {
        public static void main(String[] args) {
            //销售联想的笔记本电脑
            Computer cp = new Laptop(new Lenovo());
            cp.sale();
        }
    }
    

    相关文章

      网友评论

          本文标题:桥接模式

          本文链接:https://www.haomeiwen.com/subject/xqxapqtx.html