• 桥接模式(bridge)


    桥接模式:

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

    以电脑为类,分为电脑类型与电脑品牌两个维度

    package designmode.bridge.interfaces;
    /**
     * 电脑抽象类
     * @author baiyi
     *
     */
    public abstract class Computer {
        protected Brand brand;
    
        public Computer(Brand brand) {
            this.brand = brand;
        }
        public abstract void sale();
    }
    
    package designmode.bridge.interfaces;
    /**
     * 品牌接口
     * @author baiyi
     *
     */
    public interface Brand {
        public String getName();
    }
    package designmode.bridge.pojo;
    import designmode.bridge.interfaces.Brand;
    import designmode.bridge.interfaces.Computer;
    public class Desktop extends Computer{
        public Desktop(Brand brand) {
            super(brand);
        }
    
        public void sale() {
            System.out.printf("销售%s台式电脑%n",super.brand.getName());
        }
    }
    package designmode.bridge.pojo;
    import designmode.bridge.interfaces.Brand;
    import designmode.bridge.interfaces.Computer;
    public class Laptop extends Computer{
        public Laptop(Brand brand) {
            super(brand);
        }
        @Override
        public void sale() {
            System.out.printf("销售%s笔记本电脑%n",super.brand.getName());
        }
    
    }
    package designmode.bridge.pojo;
    import designmode.bridge.interfaces.Brand;
    import designmode.bridge.interfaces.Computer;
    public class Pad extends Computer{
        public Pad(Brand brand) {
            super(brand);
        }
        @Override
        public void sale() {
            System.out.printf("销售%s平板电脑%n", super.brand.getName());
        }
    }
    
    package designmode.bridge.pojo;
    import designmode.bridge.interfaces.Brand;
    public class Lenovo implements Brand{
        private final String NAME = "联想";
        @Override
        public String getName() {
            return this.NAME;
        }
    }
    package designmode.bridge.pojo;
    import designmode.bridge.interfaces.Brand;
    public class Dell implements Brand{
        private final String NAME = "戴尔";
        @Override
        public String getName() {
            return this.NAME;
        }
    }
    package designmode.bridge.test;
    import designmode.bridge.interfaces.Computer;
    import designmode.bridge.pojo.Dell;
    import designmode.bridge.pojo.Desktop;
    import designmode.bridge.pojo.Laptop;
    import designmode.bridge.pojo.Lenovo;
    import designmode.bridge.pojo.Pad;
    public class Client {
        public static void main(String[] args) {
            Computer c = new Laptop(new Lenovo());
            c.sale();
            Computer c1 = new Desktop(new Lenovo());
            c1.sale();
            Computer c2 = new Desktop(new Dell());
            c2.sale();
            Computer c3 = new Pad(new Lenovo());
            c3.sale();
        }
    }
    

    测试结果:

    • 桥接模式可以取代多层继承的方案,多层继承违背了单一职责原则,复用性较差,类的个数也非常多,桥接模式可以极大的减少子类的个数,从而降低管理和维护成本。

    • 桥接模式极大的提高了系统可扩展性,在两个变化维度中任意扩展一个维度,都不需要修改原有的系统,符合开闭原则。





  • 相关阅读:
    如何在ubuntu里面使用JNI?
    sql server 关键字一
    自己编写的 objectDataSource 配合 GridView 实现分页...
    委托和匿名委托的比较
    实现 IEnumerable IEnumator 接口的类,可直接用作 Gridivew 的数据源
    ASP.NET 中的页面事件执行顺序
    泛型,集合的根本区别
    匿名委托的示例,贴一下以供参考...
    ajax "Sys 未定义" 的问题解决方法
    抽象工厂模式(C#)
  • 原文地址:https://www.cnblogs.com/baiyifengyun/p/14401136.html
Copyright © 2020-2023  润新知