桥接模式
看到网上讲桥接模式,示例代码很不错,这里记录下来。
1. 定义
是指将实现与抽象放在两个不同的类层次中,使两个层次可以独立改变。
桥接模式使基于类的最小设计原则,通过使用聚合、封装及继承等行为让不同的类承担不同的职责。主要特点是将抽象与行为实现分离开来,从而可以保持各部分的独立性及应对他们的功能扩展。
JDBC的驱动使用了桥接模式
动动发财小手,关注 + 点赞 + 收藏不迷路。
2. 代码实现
/**
* 手机品牌
*
*/
public interface Brand {
/**
* 开机
*/
void open();
/**
* 关机
*/
void close();
/**
* 打电话
*/
void call();
}
public class XiaoMi implements Brand {
/**
* 开机
*/
@Override
public void open() {
System.out.println("XiaoMi手机开机");
}
/**
* 关机
*/
@Override
public void close() {
System.out.println("XiaoMi手机关机");
}
/**
* 打电话
*/
@Override
public void call() {
System.out.println("XiaoMi手机打电话");
}
}
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) {
this.brand = brand;
}
public void open() {
this.brand.open();
}
public void close() {
this.brand.close();
}
public void call() {
this.brand.call();
}
}
/**
* 折叠样式手机
*/
public class FoldePhone extends Phone {
public FoldePhone(Brand brand) {
super(brand);
}
@Override
public void open() {
System.out.println("折叠样式手机");
super.open();
}
@Override
public void close() {
System.out.println("折叠样式手机");
super.close();
}
@Override
public void call() {
System.out.println("折叠样式手机");
super.call();
}
}
public class BridgeDemo {
public static void main(String[] args) {
Phone xiaomi = new FoldePhone(new XiaoMi());
xiaomi.open();
xiaomi.call();
xiaomi.close();
Phone vivo = new FoldePhone(new Vivo());
vivo.open();
vivo.call();
vivo.close();
}
}
输出如下:
折叠样式手机
XiaoMi手机开机
折叠样式手机
XiaoMi手机打电话
折叠样式手机
XiaoMi手机关机
折叠样式手机
Vivo手机开机
折叠样式手机
Vivo手机打电话
折叠样式手机
Vivo手机关机
引用:
1.https://blog.csdn.net/weixin_40159431/article/details/121735864