zoukankan      html  css  js  c++  java
  • 桥接模式-Bridge

    桥接模式是用于把抽象化与实现化解耦,使得二者可以独立变化。这种模式涉及一个接口,作为一个桥梁,使得具体类的功能独立于接口实现类。两种类型的类可以在结构上改变而不彼此影响。

    一、类图

    桥接模式包含如下几个角色:

    • Abstraction:抽象类角色。定义抽象类的接口并维护指向Implementor类的对象指针。
    • RefinedAbstraction:扩充抽象类。扩充Abstraction定义的接口。
    • Implementor:定义实现类的接口,该接口不一定要与Abstraction的接口完全一致。事实上这两个接口可以完全不同。一般而言,Implementor接口仅提供基本操作,而Abstraction则定义基于这些基本操作的较高层次的操作。
    • ConcreteImplementor:具体实现化角色的实现类。实现Implementor接口并定义它的具体实现。

    二、示例

    手机抽象类

    abstract class Phone {
    
        private String system;
        private Software software;
    
        public abstract void openSoftware();
    
        public String getSystem() {
            return system;
        }
    
        public void setSystem(String system) {
            this.system = system;
        }
    
        public Software getSoftware() {
            return software;
        }
    
        public void setSoftware(Software software) {
            this.software = software;
        }
    
    }

    安卓手机

    class AndroidPhone extends Phone {
    
        public AndroidPhone(Software software){
            this.setSystem("Android");
            this.setSoftware(software);
        }
    
        @Override
        public void openSoftware() {
            this.getSoftware().open(this);
        }
    }

    IOS手机

    class IOSPhone extends Phone {
    
        public IOSPhone(Software software) {
            this.setSystem("IOS");
            this.setSoftware(software);
        }
    
        @Override
        public void openSoftware() {
            this.getSoftware().open(this);
        }
    }

    软件接口

    interface Software {
        void open(Phone phone);
    }

    谷歌浏览器

    class Chrome implements Software {
    
        @Override
        public void open(Phone phone) {
            System.out.println("打开 " + phone.getSystem() + " 手机的 Chrome 浏览器");
        }
    
    }

    火狐浏览器

    class FireFox implements Software {
    
        @Override
        public void open(Phone phone) {
            System.out.println("打开 " + phone.getSystem() + " 手机的浏览器");
        }
    
    }

    客户端

    public class BridgeClient {
    
        public static void main(String[] args) {
            Software chrome = new Chrome();
            Software firefox = new FireFox();
    
            Phone androidPhone = new AndroidPhone(chrome);
            androidPhone.openSoftware();
    
            androidPhone.setSoftware(firefox);
            androidPhone.openSoftware();
    
            Phone iosPhone = new IOSPhone(chrome);
            iosPhone.openSoftware();
    
            iosPhone.setSoftware(firefox);
            iosPhone.openSoftware();
        }
    
    }
     ……更多设计模式的内容,可以访问Refactoring.Guru

  • 相关阅读:
    apt-get
    微博
    字符串操作
    fly
    Oracle数据库只Dual表
    如何配置一个Oracle服务
    排序算法
    排序算法
    排序算法
    ArcEngine几个空间操作
  • 原文地址:https://www.cnblogs.com/rouqinglangzi/p/11679903.html
Copyright © 2011-2022 走看看