赞
踩
现对不同手机类型的不同品牌实现操作编程(比如:开机、关机、上网、打电话等)
扩展性问题:如果再增加手机的样式,就需要增加各个品牌类的手机
桥接模式包含如下角色:
品牌是接口Implementor,不同的牌子是接口的实现类ConcreteImplementor。
手机是抽象类Abstraction,其中聚合了品牌。折叠、滑盖、直立手机是手机的扩充抽象类RefinedAbstraction。
//实现类接口 public interface Brand { void open(); void close(); void call(); } //具体实现类 public class Xiaomi implements Brand{ public void open() { System.out.println("小米开机"); } public void close() { System.out.println("小米关机"); } public void call() { System.out.println("小米打电话"); } } public class Vivo implements Brand{ public void open() { System.out.println("vivo开机"); } public void close() { System.out.println("vivo关机"); } public void call() { System.out.println("vivo打电话"); } } //抽象类 public abstract class Phone { private Brand brand; public Phone(Brand brand) { this.brand = brand; } public void open(){ //不用去管具体实现,只需要按照传入的brand执行方法即可 brand.open(); } public void close(){ brand.close(); } public void call(){ brand.call(); } } //扩展抽象类 public class FoldPhone extends Phone { public FoldPhone(Brand brand) { super(brand); } @Override public void open() { System.out.println("折叠手机"); super.open(); } @Override public void close() { System.out.println("折叠手机"); super.close(); } @Override public void call() { System.out.println("折叠手机"); super.call(); } }
这样,在使用的时候只需要依赖Phone,然后new不同的具体手机,传入不同的brand,来实现操作的不同。
public class Client {
public static void main(String[] args) {
Phone phone1 = new FoldPhone(new Xiaomi());
phone1.open();
phone1.call();
phone1.close();
Phone phone2 = new FoldPhone(new Vivo());
phone2.open();
phone2.call();
phone2.close();
}
}
这样,当我们需要增加一种新的手机样式,比如直立式,完全不需要去管品牌类。当新增一种品牌,完全不需要去管样式。也就实现了抽象和实现分离。
JDBC的Driver接口,如果从桥接模式来看,Driver就是一个接口,下面可以有MySQL的Driver,Oracle的Driver,这些就可以当作实现接口类。
不希望使用继承或者是因为多层次继承导致系统类的个数急剧增加的系统。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。