桥接模式(Bridge),将抽象部分与它的实现分离,使它们可以独立地变化。
理解:实现系统可能有多个角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让它们独立变化,减少它们之间的耦合。
比如:手机有很多品牌,每种品牌的手机都有多个不用的游戏。
则可以分为手机品牌和手机软件,手机软件属于手机品牌,它们属于聚合关系。
桥接模式的核心意图就是把这些实现独立出来,让它们各自的变化,这就使得每种实现的变化不会影响其他实现,从而达到应对变化的目的。
当我们发信啊需要多角度去分类实现对象,而只用继承会造成大量的类增加,不能满足开放-封闭原则时,就应该考虑用桥接模式了。
MobileBrand类
package bridge; public abstract class MobileBrand { protected MobileSoft soft ; public void setMobileSoft(MobileSoft soft){ this.soft = soft; } public abstract void run(); }
MobileBrandM类
package bridge; public class MobileBrandM extends MobileBrand { @Override public void run() { soft.run(); } }
MobileBrandN类
package bridge; public class MobileBrandN extends MobileBrand { @Override public void run() { soft.run(); } }
MobileSoft类
package bridge; public abstract class MobileSoft { public abstract void run(); }
MobileSoftA类
package bridge; public class MobileSoftA extends MobileSoft { @Override public void run() { System.out.println("运行手机软件A"); } }
MobileSoftB类
package bridge; public class MobileSoftB extends MobileSoft { @Override public void run() { System.out.println("运行手机软件B"); } }
MobileSoftC类
package bridge; public class MobileSoftC extends MobileSoft { @Override public void run() { System.out.println("运行手机软件C"); } }
Business类
package bridge; public class Business { public static void main(String[] args) { MobileBrand bandM = new MobileBrandM(); bandM.setMobileSoft(new MobileSoftA()); bandM.run(); bandM.setMobileSoft(new MobileSoftB()); bandM.run(); MobileBrand bandN = new MobileBrandM(); bandN.setMobileSoft(new MobileSoftA()); bandN.run(); bandN.setMobileSoft(new MobileSoftB()); bandN.run(); bandN.setMobileSoft(new MobileSoftC()); bandN.run(); } }