Bridge
桥接模式:将抽象部分和它实现的部分分离,使得它们都可以独立地变化。
什么叫抽象与它的实现分离,并不是说,让抽象与其派生类分离,因为这是没有任何意义。实现是指抽象类和它的派生类用自己的对象。如:手机既可以按照品牌来分类,也可以按照功能来分类。
Bridge模式是构造型的设计模式之一。Bridge模式基于类的最小设计原则,通过使用封装,聚合以及继承等行为来让不同的类承担不同的责任。它的主要特点是把抽象(abstraction)与行为实现(implementation)分离开来,从而可以保持各部分的独立性以及应对它们的功能扩展。
实现系统可能有多角度分类,每一种分类都有可能变化,那么把这种多角度分离出来让它们独立变化,减少它们之间的耦合。
public abstract class PhoneSoft { public abstract void run(); } class Game extends PhoneSoft{ @Override public void run() { System.out.println("运行手机游戏!"); } } //若添加手机软件,只需要再写一个类继承。 class Address extends PhoneSoft{ @Override public void run() { System.out.println("运行手机通讯录!"); } }
public abstract class PhoneBrand { protected String name; //聚合关系 protected PhoneSoft soft; public PhoneBrand(String name) { this.name = name; } //设置手机软件,品牌需要关注软件 public void setPhoneSoft(PhoneSoft soft) { this.soft = soft; } public abstract void opera(); } class BrandM extends PhoneBrand { public BrandM(String name) { super(name); } @Override public void opera() { System.out.println("The Brand is " + name); soft.run(); } } class BrandN extends PhoneBrand { public BrandN(String name) { super(name); } @Override public void opera() { System.out.println("The Brand is " + name); soft.run(); } }
public static void main(String[] args) { PhoneSoft game = new Game(); PhoneSoft address = new Address(); PhoneBrand brandM = new BrandM("M"); PhoneBrand brandN = new BrandM("N"); brandM.setPhoneSoft(game); brandN.setPhoneSoft(address); brandM.opera(); brandN.opera(); }
打印结果:
The Brand is M
运行手机游戏!
The Brand is N
运行手机通讯录!