设计模式之桥接模式
设计模式 Java About 2,638 words作用
解决类爆炸问题,将抽象部分与它的实现部分相分离,使他们可以独立的变化。
原理图
Abstraction:维护了Implementor与它的实现类ConcreteImplementorA/B,Abstraction与Implementor是聚合关系,Abstraction充当桥接类。
RefineAbstraction:是抽象类Abstraction的子类
Implementor:行为实现类的接口
ConcreteImplementorA/B:行为的具体实现类
案例
Abstraction
桥接抽象类-手机
public abstract class Phone {
private Brand brand;//聚合品牌
public Phone(Brand brand) {
this.brand = brand;
}
protected void open() {
brand.open();
}
protected void close() {
brand.close();
}
protected void call() {
brand.close();
}
}
Implementor
行为实现类的接口-品牌
public interface Brand {
void open();
void close();
void call();
}
ConcreteImplementorA
行为的具体实现类-小米手机
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("小米手机打电话");
}
}
ConcreteImplementorB
行为的具体实现类-Vivo手机
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手机打电话");
}
}
RefineAbstraction
实现抽象类的子类-翻盖手机
public class FoldedPhone extends Phone {
public FoldedPhone(Brand brand) {
super(brand);
}
@Override
public void open() {
super.open();
System.out.println("翻盖手机-开机");
}
@Override
public void close() {
super.close();
System.out.println("翻盖手机-关机");
}
@Override
public void call() {
super.call();
System.out.println("翻盖手机-打电话");
}
}
实现抽象类的子类-直板手机
public class UpRightPhone extends Phone {
public UpRightPhone(Brand brand) {
super(brand);
}
@Override
public void open() {
super.open();
System.out.println("直板手机-开机");
}
@Override
public void close() {
super.close();
System.out.println("直板手机-关机");
}
@Override
public void call() {
super.call();
System.out.println("直板手机-打电话");
}
}
Client
调用
public class Client {
public static void main(String[] args) {
Phone phone1 = new FoldedPhone(new XiaoMi());
phone1.open();
phone1.call();
phone1.close();
System.out.println("----------------");
Phone phone2 = new UpRightPhone(new Vivo());
phone2.open();
phone2.call();
phone2.close();
}
}
Views: 3,172 · Posted: 2019-12-17
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb/LiteNote扫描下方二维码关注公众号和小程序↓↓↓
Loading...