桥接模式
桥接模式主要作用还是解耦。
理解桥接模式,重点需要理解如何将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化。
例如:
在上面的图中,针对不同样式的手机折叠式、直立式、旋转式,他们打电话的方式都不同。而且不同的手机品牌打电话方式也不同;如果还要增加一种样式的手机,那么还需要在这种样式的手机下再增加不同品牌的手机,这种情况违反了单一职责原则。容易造成类爆炸。
分析: 其实这种情景下的设计做的都是解耦,手机外形为一个类,手机品牌为一个类,两个类之间再做聚合,则两类之间就可以解耦了。再根据依赖倒置原则,尽量依赖抽象,以后增减新手机外形或者手机品牌,都只需要实现接口就行了。
/**
* 定义手机品牌
*/
public interface PinPai {
String call();//定义打电话方式
}
/**
* 小米手机实现品牌
*/
public class XiaoMI implements PinPai{
public String call() {
return "小米手机";
}
}
/**
* 手机外形抽象类,这个就是桥接模式中的桥
*/
public abstract class WaiXing {
protected PinPai pinPai;
public abstract void call();
public WaiXing(PinPai pinPai) {
this.pinPai = pinPai;
}
}
/**
* 折叠外形的手机
*/
public class ZheDie extends WaiXing{
public ZheDie(PinPai pinPai) {
super(pinPai);
}
public void call() {
System.out.println(pinPai.call()+"折叠手机打电话");
}
}
public class Client {
public static void main(String[] args) {
WaiXing waiXing = new ZheDie(new XiaoMI());
waiXing.call();
}
}