设计模式之桥接模式
设计模式 Java 大约 2638 字作用
解决类爆炸问题,将抽象部分与它的实现部分相分离,使他们可以独立的变化。
原理图
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();
}
}
阅读 2592 · 发布于 2019-12-17
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb扫描下方二维码关注公众号和小程序↓↓↓

昵称:
随便看看
换一批
-
Element UI DatePicker 时间跨度限制在同一个月内阅读 5864
-
Arthas 使用 trace 查找耗时操作和调用链路阅读 8766
-
Spring Boot JPA 关键字自动添加双引号阅读 1069
-
MySQL 之 Windows 免安装版本配置环境阅读 1999
-
软考-系统架构设计师:进程管理-银行家算法阅读 1504
-
Linux 常用命令之基础命令阅读 2179
-
走进 Rust:泛型阅读 2275
-
IE localStorage Unable to get property 'setItem' of undefined or null reference阅读 837
-
算法:插入排序阅读 864
-
Go 格式化时间 yyyy-MM-dd阅读 6803