1.问题
需求:对不同手机类型的
不同品牌实现操作编程
传统方法:
缺点:
(1)类爆炸
(2)违反了单一职责原则,增加手机样式时,要同时增加所有品牌的手机。
2.基本介绍
桥接模式:是一种结构性设计模式,基于类的最小设计原则,将实现与抽象放在两个不同的层次中,使两个层次可以独立改变。
3.原理类图
Client类:模拟客户端
抽象类(Abstraction) : 维护了 Implementor 接口 ,即它的实现类是聚合关系,Abstraction充当桥接类
Implementor接口:行为实现类接口.
RefindedAbstraction:作为抽象类(Abstraction) 的子类;
ConcreteImplementA/B:具体实现类
4.解决问题
FolderPhone调用open,走的是父类的open,而父类中的open是通过接口找到vivo open Phone类似一个桥
public interface Brand {
void open();
void close();
void call();
}
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 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 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 Client {
public static void main(String[] args) {
Phone phone1 = new FoldedPhone(new XiaoMi());
phone1.open();
phone1.call();
phone1.close();
}
}
JS没有经典应用