设计模式(八):桥接模式
- [1. 桥接模式的介绍](#1. 桥接模式的介绍)
- [2. 桥接模式的类图](#2. 桥接模式的类图)
- [3. 桥接模式的实现](#3. 桥接模式的实现)
-
- [3.1 创建实现接口](#3.1 创建实现接口)
- [3.2 创建实现了 Cook 接口的实体桥接实现类](#3.2 创建实现了 Cook 接口的实体桥接实现类)
- [3.3 使用 Cook 接口创建抽象类 Chef](#3.3 使用 Cook 接口创建抽象类 Chef)
- [3.4 创建实现了 Chef 抽象类的实体类](#3.4 创建实现了 Chef 抽象类的实体类)
- [3.5 测试](#3.5 测试)
1. 桥接模式的介绍
桥接模式
(Bridge Pattern)属于结构型模式,是用于把抽象化与实现化解耦,使得二者可以独立变化。它通过组合的方式,而不是继承的方式,将抽象和实现的部分连接起来。
桥接模式的四个关键角色:
- 抽象(Abstraction):定义抽象接口,通常包含对实现接口的引用。
- 扩展抽象(Refined Abstraction):对抽象的扩展,可以是抽象类的子类或具体实现类。
- 实现(Implementor):定义实现接口,提供基本操作的接口。
- 具体实现(Concrete Implementor):实现实现接口的具体类。
2. 桥接模式的类图
有一个作为桥接实现的 Cook
接口和实现了Cook
接口的实体类 ChineseCook
、EuropeanCook
。Chef
是一个抽象类,将使用 Cook
的对象。
3. 桥接模式的实现
3.1 创建实现接口
java
package blog;
/**
* 实现接口
*/
public interface Cook {
void cook();
}
3.2 创建实现了 Cook 接口的实体桥接实现类
java
package blog;
/**
* 具体实现
*/
public class ChineseCook implements Cook{
@Override
public void cook() {
System.out.println("中餐");
}
}
java
package blog;
/**
* 具体实现
*/
public class EuropeanCook implements Cook{
@Override
public void cook() {
System.out.println("西餐");
}
}
3.3 使用 Cook 接口创建抽象类 Chef
java
package blog;
/**
* 抽象接口
*/
public abstract class Chef {
protected Cook cook;
public Chef(Cook cook) {
this.cook = cook;
}
protected abstract void cook();
}
3.4 创建实现了 Chef 抽象类的实体类
java
package blog;
/**
* 扩展抽象
*/
public class AdvancedChef extends Chef{
public AdvancedChef(Cook cook) {
super(cook);
}
@Override
protected void cook() {
cook.cook();
}
}
3.5 测试
java
package blog;
public class BridgeDemo {
public static void main(String[] args) {
AdvancedChef chef1 = new AdvancedChef(new ChineseCook());
chef1.cook();
AdvancedChef chef2 = new AdvancedChef(new EuropeanCook());
chef2.cook();
}
}