桥接模式
描述
桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interface)模式。
核心
将类的功能层次和实现层级结构相连接起来
这种层级结构的特点:
父类具有基本功能 父类通过抽象方法定义相关接口(API)
子类在父类上添加新功能 子类通过具体方法来实现接口(API)
背景
此篇我们已手机和软件为例 来讨论桥接模式
手机分为Apple手机和华为手机,手机具有共有的功能(父类的功能) 品牌特殊的功能(子类新添加的功能)
软件也同理 每个手机上搭载不同的软件 我们此处将手机与软件进行桥接,就实现了抽象与行为实现的分离,这种就是桥接模式的存在意义
UML类图
代码实现
软件的抽象类
public abstract class Soft {
public abstract void chat();
}
微信软件的实现
public class Wechat extends Soft {
@Override
public void chat() {
System.out.println("Wechat");
}
}
QQ软件的实现
public class QQ extends Soft {
@Override
public void chat() {
System.out.println("QQ");
}
}
手机的抽象类 – 桥接上软件
public abstract class phone {
protected Soft soft;
public phone(Soft soft) {
this.soft = soft;
}
public abstract void run();
}
华为手机的实现
public class HuaWei extends phone {
public HuaWei(Soft soft) {
super(soft);
}
@Override
public void run() {
this.soft.chat();
}
public void hw_Photo(){
System.out.println("HW hw_Photo");
}
}
苹果手机的实现
public class Apple extends phone {
public Apple(Soft soft) {
super(soft);
}
@Override
public void run() {
this.soft.chat();
}
public void apple_Photo(){
System.out.println("Apple apple_Photo");
}
}
测试类
public class Test {
public static void main(String[] args) {
Apple apple = new Apple(new Wechat());
apple.run();
apple.apple_Photo();
}
}
Wechat
Apple apple_Photo