桥接模式
定义: 将抽象部分与它的实现部分分离,使它们都可以独立地变化。
例子,手机软件
实现
public interface Software { public void run(); } public class AppStore implements Software { @Override public void run() { System.out.println("run app store"); } } public class Camera implements Software { @Override public void run() { System.out.println("run camera"); } }
抽象
public abstract class Phone { protected Software software; public void setSoftware(Software software) { this.software = software; } public abstract void run(); } public class Oppo extends Phone { @Override public void run() { software.run(); } } public class Vivo extends Phone { @Override public void run() { software.run(); } }
适用场景
桥接模式通常适用于以下场景。
-
当一个类存在两个独立变化的维度,且这两个维度都需要进行扩展时。
-
当一个系统不希望使用继承或因为多层次继承导致系统类的个数急剧增加时。
-
当一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性时。
优缺点
优点:
(1)在很多情况下,桥接模式可以取代多层继承方案,多层继承方案违背了“单一职责原则”,复用性较差,且类的个数非常多,桥接模式是比多层继承方案更好的解决方法,它极大减少了子类的个数。
(2)桥接模式提高了系统的可扩展性,在两个变化维度中任意扩展一个维度,都不需要修改原有系统,符合“开闭原则”。
缺点:
桥接模式的使用会增加系统的理解与设计难度,由于关联关系建立在抽象层,要求开发者一开始就针对抽象层进行设计与编程。