桥接模式
将实现与抽象放在两个不同的类层次中,使得两个类层次可以独立改变。对于那些不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统,桥接模式尤为适用。
使用环境:
- JDBC程序驱动
- 银行转账系统:网上转账,柜台转账,ATM转账
- 消息分类:……
类图:
代码实现:
public class Client {
public static void main(String args[]){
Phone phone=new FoldedPhone(new Vivo());
phone.call();
phone.close();
phone.open();
Phone phone1=new FoldedPhone(new Hawei());
phone1.open();
phone1.close();
phone1.call();
Phone phone2=new UpRightPhone(new Vivo());
phone2.call();
phone2.close();
phone2.open();
}
}
public interface Brand {
public void call();
public void open();
public void close();
}
public abstract class Phone {
private Brand brand;
public Phone(Brand brand) {
this.brand = brand;
}
protected void open(){
this.brand.open();
}
protected void call(){
this.brand.call();
}
protected void close(){
this.brand.close();
}
}
public class Vivo implements Brand {
@Override
public void call() {
System.out.println("Vivo手机打电话");
}
@Override
public void open() {
System.out.println("Vivo手机开机");
}
@Override
public void close() {
System.out.println("Vivo手机关机");
}
}
public class Hawei implements Brand {
@Override
public void call() {
System.out.println("华为手机打电话");
}
@Override
public void open() {
System.out.println("华为手机开机");
}
@Override
public void close() {
System.out.println("华为手机关机");
}
}
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.open();
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.open();
System.out.println("直立手机打电话");
}
}