桥接模式又名桥梁模式,是一种结构型模式,个人感觉这种模式在实际中运用的比较少,是一种比较简单但不常使用的设计模式。
意图:将抽象部分与实现部分分离,使它们都可以独立的变化。
假设想要购买手机,这里有两个维度进行挑选,一个是运行内存(6G、8G),一个是手机品牌如小米、华为...。
内存代码
/**
* 内存接口
*/
public interface Memory {
//安装内存
void addMemory();
}
/**
* 6G内存
*/
class Memory6G implements Memory{
@Override
public void addMemory() {
System.out.println("添加的6G内存");
}
}
/**
* 8G内存
*/
class Memory8G implements Memory{
@Override
public void addMemory() {
System.out.println("添加的8G内存");
}
}
手机代码
/**
* 手机抽象类
*/
public abstract class Phone {
//内存
protected Memory memory;
public void setMemory(Memory memory) {
this.memory = memory;
}
/**
* 抽象方法买手机
*/
public abstract void buyPhone();
}
/**
* 小米品牌
*/
class XiaoMiPhone extends Phone{
@Override
public void buyPhone() {
memory.addMemory();
System.out.println("购买了小米手机");
}
}
/**
* 华为品牌
*/
class HuaWeiPhone extends Phone{
@Override
public void buyPhone() {
memory.addMemory();
System.out.println("购买了华为手机");
}
}
测试运行类
public class Client {
public static void main(String[] args) {
//华为8G
Phone phone = new HuaWeiPhone();
phone.setMemory(new Memory8G());
phone.buyPhone();
//小米6G
phone = new XiaoMiPhone();
phone.setMemory(new Memory6G());
phone.buyPhone();
}
}
运行结果
添加的8G内存
购买了华为手机
添加的6G内存
购买了小米手机
注意事项
桥梁模式是非常简单的,使用该模式时主要考虑如何拆分抽象和实现,并不是一涉及继承就要考虑使用该模式,那还要继承干什么呢?桥梁模式的意图还是对变化的封装,尽量把可能变化的因素封装到最细、最小的逻辑单元中,避免风险扩散。因此在进行系统设计时,发现类的继承有多层时,可以考虑使用桥梁模式。