桥接模式
桥接模式
采用的组合模式,将接口中的方法通过抽象类的桥传到具体的子类中,很形象!
实现了抽象与实现部分的分离,系统的灵活性提高。
对于系统的高层而言,只需要知道抽象部分和实现部分的接口就可以了,其他的有具体业务来完成
好处
由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计和编程
应用场景
系统中两个独立变化的维度很好的识别出来才能用,有一定的局限性。
适用于不需要使用继承和多层次继承导致系统类的个数急剧增加的系统
代码演示
public interface Brand { public void call(); } public class Huawei implements Brand { @Override public void call() { System.out.println("huawei手机打电话"); } } public class Vivo implements Brand { @Override public void call() { System.out.println("Vico手机打电话"); } } public abstract class Phone { /*组合品牌*/ private Brand brand; /*构造器*/ public Phone(Brand brand) { this.brand = brand; } protected void call(){ /*组合了品牌,就可以直接调用这个类*/ brand.call(); } } public class FoldedPhone extends Phone { /*构造器*/ public FoldedPhone(Brand brand) { super(brand); } public void call(){ super.call(); System.out.println("折叠样式手机"); } } public class Client { public static void main(String[] args) { FoldedPhone foldedPhone = new FoldedPhone(new Huawei()); foldedPhone.call(); } }
总结
什么时候用接口,什么时候用抽象类。分清楚产品与产品功能,分清楚实现与特性
以鸟为例子,鸟有很多种类,鸟有很多行为,不同鸟的同一个行为都不一样,鸟1的飞翔方式和鸟2的飞行方式就不一样,分析不同的和相同点,相同点为每个鸟都有这些行为,不同点在于每种鸟实现的方式不一样,这时候用桥接模式就很好。
把鸟种类和鸟的实现方式解耦,不为继承关系,而是同等地位,用聚合的方式或者组合的方式,看你的意愿。