设计模式--桥接模式
基本介绍
- 桥接模式(Bridge模式)是指:将实现与抽象放在两个不同的类层次中,使两个层次可以独立改变
- 是一种结构型设计模式
- Bridge模式给予类的最小设计原则,通过使用封装、聚合及继承等行为让不同等类承担不同等职责。它等主要特点是把抽象(Abstraction)与行为实现(Implementation)分离,从而可以保持各部分等独立性以及应对他们等功能扩展
手机操作问题
现在对不同的手机类型的不同品牌实现操作编程(比如:开机、上网、打电话)
新建品牌接口
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("小米手机打电话");
}
}
实现类 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手机打电话");
}
}
新建手机抽象类
public abstract class Phone {
//组合品牌
private Brand brand;
public Phone(Brand brand) {
this.brand = brand;
}
protected void open(){
this.brand.open();
}
protected void close(){
this.brand.close();
}
protected void call(){
this.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 phone = new FoldedPhone(new Xiaomi());
phone.open();
phone.call();
Phone phone2 = new FoldedPhone(new Vivo());
phone2.open();
phone2.call();
}
}
当我们新增品牌 或者手机类型当时候 只需要增加一个类 就好
增加直立式手机
public class UpRightPhone extends Phone {
public UpRightPhone(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 phone = new FoldedPhone(new Xiaomi());
phone.open();
phone.call();
System.out.println("-=============================-");
Phone phone2 = new UpRightPhone(new Vivo());
phone2.open();
phone2.call();
}
}
- 在JDBC源码中就使用类桥接模式