设计模式——桥接模式(Bridge模式)

基本介绍

  1. 桥接模式(Bridge模式):将实现与抽象放在两个不同的类层次中,使两层次可以独立改变
  2. 是一种结构型设计模式
  3. 说白了就是有多个维度的变化,这样的组合关系如果按照传统的方式会导致类爆炸,所以需要将两个维度抽象出来,然后让其通过对象进行组合,来减少类的创建

用手机来举例

当前有两个维度:1. 品牌; 2. 样式
品牌:小米 华为 Vivo等
手机样式:直板机、滑盖机、翻盖机等

先定义品牌维度接口

public interface Brand {
    // 品牌口号
    String brandVoice();
}
定义一个品牌小米
public class Xiaomi implements Brand {
    @Override
		public String brandVoice() {
        return "为发烧而生...";
    }
}

在定义样式接口

public interface PhoneStyle {
  // 手机样式
	String style();
}
定义电话类
public abstract class Phone {
    //组合品牌
    private Brand mBrand;

    //构造器
    public Phone(Brand mBrand) {
        this.mBrand = mBrand;
    }

    protected void open(){
        this.mBrand.brandVoice();
        System.out.println("phone open");
    }

    protected void close(){
        this.mBrand.brandVoice();
        System.out.println("phone close");
    }

    protected  void call(){
        this.mBrand.brandVoice();
        System.out.println("phone call");
    }

}

定义具体的Phone类

//折叠式手机类,继承抽象类Phone
public class FoldedPhone extends Phone implements PhoneStyle {
    //构造器
    public FoldedPhone(Brand mBrand) {
        super(mBrand);
    }

    public void open(){
        super.open();
	      style();
    }

    public void close(){
        super.close();
	      style();
    }

    public void call(){
        super.call();
	      style();
    }
  
    @Override
    public String style() {
      return "折叠式手机";
    }
}
使用
public class Client {
    public static void main(String[] args){
        //获取折叠式手机(样式+品牌)
        Phone phone1 = new FoldedPhone(new Xiaomi());
        phone1.open();
        phone1.call();
        phone1.close();
    }
}
这就使桥接模式,从类图上可以看出,一个抽象类带一个接口飞的样子,其实还可以继续抽象,不过再抽象就接近装饰者模式了
上一篇:Socket介绍、Socket代码示例、粘包现象解释


下一篇:ElasticSearch学习路线(Python)