参考资料:
桥接模式产生:
- 当存在二维及以上拓展业务时,如:手机的型号(折叠式、直板式、旋盖式)与品牌(OPPO、华为、vivo等)、房屋地域(北京、上海、广州等)与装修价位(5W、10W、15W)内部的选材及设计
- 按照传统的设计方法为
但是这种办法,当我们新增加一个手机类型,如智能机,就要重写就要重写一遍所有的手机型号,当我们新增加一个手机品牌,如三星,就需要在在所有的手机类型下增加三星这个手机品牌,这就是所谓的类爆炸,具体查看参考资料中的参考代码。
桥接模式的产生:
- 为了解决上述类爆炸问题,所以就产生了桥接模式。
- 桥接模式就是将一个维度整合为接口,放入抽象类中,被另一个维度继承实现,具体思路如下,代码见本人参考代码:
- 这样的话,我们再加一个新的手机类型,比如:智能机,或者新的手机品牌,比如vivo就不需要去修改那么多类,也不会产生类爆炸的事情。
关于桥接模式代码的演示(详见参考资料):
-
Brand
public interface Brand {
void open();
void close();
void call();
}
- Oppo
package com.example.demo.bridge.bridgeDemo;
public class Oppo implements Brand{
@Override
public void open() {
System.out.println("OPPO手机开机!!!");
}
@Override
public void close() {
System.out.println("OPPO手机关机!!");
}
@Override
public void call() {
System.out.println("OPPO手机打电话!!!");
}
}
- Phone
package com.example.demo.bridge.bridgeDemo;
public abstract class Phone {
//组合品牌
private Brand brand;
//构造器
public Phone(Brand brand) {
super();
this.brand = brand;
}
protected void open(){
this.brand.open();
}
protected void close(){
this.brand.close();
}
protected void call(){
this.brand.call();
}
}
- FoldedPhone
package com.example.demo.bridge.bridgeDemo;
public class FoldedPhone extends Phone{
//构造器
public FoldedPhone(Brand brand) {
super(brand);
}
@Override
public void open(){
super.open();
System.out.println("折叠样式手机");
}
@Override
public void close(){
super.close();
System.out.println("折叠样式手机");
}
@Override
public void call(){
super.call();
System.out.println("折叠样式手机");
}
}
- Client
package com.example.demo.bridge.bridgeDemo;
public class Client {
public static void main(String[] args) {
System.out.println("======== start =============");
FoldedPhone foldedPhone = new FoldedPhone(new XIaoMi());
foldedPhone.open();
foldedPhone.call();
foldedPhone.close();
}
}