普通实现:
/** * 普通实现 * 此处违反单一职责(类中有类型和品牌两处职责, 一但扩展(增加手机电脑)导致子类膨胀) * 桥接模式适合在拥有两个变化[扩展]的维度中使用! */ package bridge_mode; /** * 电脑类型 */ public interface Computer_ { /** * 销售 */ void sale(); } /** * 台式电脑 */ class Desktop_ implements Computer_ { @Override public void sale() { System.out.println("销售台式机!"); } } /** * 笔记本电脑 */ class Laptop_ implements Computer_ { @Override public void sale() { System.out.println("销售笔记本!"); } } /** * 平板电脑 */ class Pad_ implements Computer_ { @Override public void sale() { System.out.println("销售平板电脑!"); } } /** * 联想台式电脑 */ class LenovoDesktop_ extends Desktop_ { @Override public void sale() { System.out.println("销售联想台式机!"); } } /** * 联想笔记本电脑 */ class LenovoLaptop_ extends Desktop_ { @Override public void sale() { System.out.println("销售联想笔记本!"); } } /** * 联想平板电脑 */ class LenovoPad_ extends Pad_ { @Override public void sale() { System.out.println("销售联想平板电脑!"); } } /** * 神州台式电脑 */ class ShenZhouDesktop_ extends Desktop_ { @Override public void sale() { System.out.println("销售神州台式机!"); } } /** * 神州笔记本电脑 */ class ShenZhouLaptop_ extends Desktop_ { @Override public void sale() { System.out.println("销售神州笔记本!"); } } /** * 神州平板电脑 */ class ShenZhouPad_ extends Pad_ { @Override public void sale() { System.out.println("销售神州平板电脑!"); } } /** * 戴尔台式电脑 */ class DellDesktop_ extends Desktop_ { @Override public void sale() { System.out.println("销售戴尔台式机!"); } } /** * 戴尔笔记本电脑 */ class DellLaptop_ extends Desktop_ { @Override public void sale() { System.out.println("销售戴尔笔记本!"); } } /** * 戴尔平板电脑 */ class DellPad_ extends Pad_ { @Override public void sale() { System.out.println("销售戴尔平板电脑!"); } }
普通实现类图:
Demo:
品牌类型及子类:
package bridge_mode; /** * 品牌类型的维度 */ public interface Brand { /** * 销售 */ void sale(); } /** * 联想品牌 */ class LenovoBrand implements Brand { @Override public void sale() { System.out.println("销售联想..."); } } /** * 神州品牌 */ class ShenZhouBrand implements Brand { @Override public void sale() { System.out.println("销售神州..."); } } /** * 戴尔品牌 */ class DellBrand implements Brand { @Override public void sale() { System.out.println("销售戴尔..."); } }
电脑类型及子类:
package bridge_mode; /** * 电脑类型的维度 */ public class Computer { /** * 持有品牌(有一个品牌) * 使用组合, 可以替换继承 */ protected Brand brand;//子类要使用它, 声明protected /** * 构造器(传入品牌) */ public Computer(Brand brand){ this.brand = brand; } /** * 销售(品牌) */ public void sale(){ brand.sale(); } } /** * 台式电脑 */ class Desktop extends Computer { /** * 初始化父类, 使之可以调用品牌行为 * 传入品牌算法族的某个, 也可以给父类设置set方法, 运行期动态的改变品牌 */ public Desktop(Brand brand) { super(brand); } /** * 具有XX品牌的销售行为, 同时具有台式机的销售行为 */ @Override public void sale(){ super.sale(); System.out.println("销售台式机!"); } } /** * 笔记本电脑 */ class Laptop extends Computer { public Laptop(Brand brand) { super(brand); } @Override public void sale(){ super.sale(); System.out.println("销售笔记本!"); } } /** * 平板电脑 */ class Pad extends Computer { public Pad(Brand brand) { super(brand); } @Override public void sale(){ super.sale(); System.out.println("销售平板电脑!"); } }
类图:
测试类:
package bridge_mode; public class Client { public static void main(String[] args) { //销售联想笔记本电脑 Computer c = new Laptop(new LenovoBrand()); c.sale(); //销售神州台式机 Computer c2 = new Desktop(new ShenZhouBrand()); c2.sale(); } }
执行结果:
销售联想... 销售笔记本! 销售神州... 销售台式机!
谢谢声明出处!
转自: http://www.cnblogs.com/gscq073240/articles/7117162.html