比如手机类,有各种类型,比如翻盖、平板等,每一类下又有各个品牌,比如华为,如果新增一个类型,比如折叠屏,或者新增一个手机品牌,苹果,那么会导致
扩展性问题。
这种情况下,应该使用桥接模式。
代码:
创建手机品牌接口以及两个手机品牌实现类
//品牌手机接口 public interface Brand { void open(); void close(); void call(); } public class Vivo implements Brand { @Override public void open() { System.out.println(" Vivo手机开机 "); } @Override public void close() { System.out.println(" Vivo手机关机"); } @Override public void call() { System.out.println(" Vivo手机打电话"); } } public class XiaoMi implements Brand { @Override public void open() { System.out.println("小米手机开机 "); } @Override public void close() { System.out.println("小米手机关机"); } @Override public void call() { System.out.println("小米手机打电话"); } }
创建 手机抽象类,以及两个按照类别区别的实现类:
public abstract class Phone { //组合 品牌 private Brand brand; //构造器 public Phone(Brand brand) { super(); this.brand = brand; } protected void open() { this.brand.open(); } protected void close() { brand.close(); } protected void call() { brand.call(); } } //折叠手机 public class FoldedPhone extends Phone { public FoldedPhone(Brand brand) { super(brand); } public void open() { super.open(); System.out.println("折叠手机 "); } public void close() { super.close(); System.out.println("折叠手机 "); } public void call() { super.call(); System.out.println("折叠手机 "); } } //翻盖手机 public class UpRightPhone extends Phone { public UpRightPhone(Brand brand) { super(brand); } public void open() { super.open(); System.out.println(" 翻盖手机"); } public void close() { super.close(); System.out.println("翻盖手机"); } public void call() { super.call(); System.out.println(" 翻盖手机"); } }
测试:
public static void main(String[] args) { Phone phone1 = new FoldedPhone(new XiaoMi()); phone1.open(); phone1.call(); phone1.close(); System.out.println("======================="); Phone phone2 = new FoldedPhone(new Vivo()); phone2.open(); phone2.call(); phone2.close(); System.out.println("=============="); UpRightPhone phone3 = new UpRightPhone(new XiaoMi()); phone3.open(); phone3.call(); phone3.close(); System.out.println("=============="); UpRightPhone phone4 = new UpRightPhone(new Vivo()); phone4.open(); phone4.call(); phone4.close(); }
===================================
===========================================