桥接模式Bridge
桥接(Bridge)模式的定义如下:将抽象与实现分离,使它们可以独立变化。是一种对象结构模式,称为炳体(Handle and Body)模式或者接口模式。减少子类。
桥接(Bridge)模式包含以下主要角色。
- 抽象化(Abstraction)角色:定义抽象类,并包含一个对实现化对象的引用。
- 扩展抽象化(Refined Abstraction)角色:是抽象化角色的子类,实现父类中的业务方法,并通过组合关系调用实现化角色中的业务方法。
- 实现化(Implementor)角色:定义实现化角色的接口,供扩展抽象化角色调用。
- 具体实现化(Concrete Implementor)角色:给出实现化角色接口的具体实现。
![https://img-blog.csdnimg.cn/20210507161925167.gif)
例子
原来的方法:一个新的类型,每一个匹配都需要重新写属于自己的类型。
改变原理一层一层继承。直接进行组装。
品牌–接口
public interface Brand{
public void info(){}
}
具体品牌类
public class Lenovo implements Brand{
@Override
public void info(){
System.out.println("联想");
}
}
public class Apple implements Brand{
@Override
public void info(){
System.out.println("Apple");
}
}
抽象电脑类类型
public abstract class Computer{
// 组合品牌
protected Brand brand; // 目的是为了让子类也可以使用
public Computer(Brand brand){
this.brand = brand;
}
public void info(){
// 自带品牌
brand.info();
}
}
class Desktop extends Computer{
public Desktop(Brand brand){
super(brand); // 使用父类的构造方法
}
@Override
public void info(){
brand.info();
System.out.println("台式机");
}
}
class Laptop extends Computer{
public Laptop(Brand brand){
super(brand); // 使用父类的构造方法
}
@Override
public void info(){
brand.info();
System.out.println("笔记本");
}
}
测试
public class Test{
public static void main(String arg[]){
//苹果笔记本
Computer computer = new Laptop(new Apple());
computer.info();
//联想台式机
Computer computer1 = new Desktop(new Lenovo());
computer1.info();
}
}
个人见解: //需求:类型(电脑、平板)为"主类",品牌及其它的为零件类,需要把零件类全部组装到主类上。(零件类可以有多个)
如果主类使用接口,接口不能定义属性,从而不能通过构造方法保证类型的全部组装
应用:Java虚拟机,JDBC驱动,AWT的Peer架构