设计模式(八):桥接模式

发布于:2024-05-01 ⋅ 阅读:(28) ⋅ 点赞:(0)

1. 桥接模式的介绍

桥接模式(Bridge Pattern)属于结构型模式,是用于把抽象化与实现化解耦,使得二者可以独立变化。它通过组合的方式,而不是继承的方式,将抽象和实现的部分连接起来。

桥接模式的四个关键角色:

  • 抽象(Abstraction):定义抽象接口,通常包含对实现接口的引用。
  • 扩展抽象(Refined Abstraction):对抽象的扩展,可以是抽象类的子类或具体实现类。
  • 实现(Implementor):定义实现接口,提供基本操作的接口。
  • 具体实现(Concrete Implementor):实现实现接口的具体类。

2. 桥接模式的类图

有一个作为桥接实现的 Cook 接口和实现了Cook 接口的实体类 ChineseCookEuropeanCookChef 是一个抽象类,将使用 Cook 的对象。
在这里插入图片描述

3. 桥接模式的实现

3.1 创建实现接口

package blog;

/**
 * 实现接口
 */
public interface Cook {
    void cook();
}

3.2 创建实现了 Cook 接口的实体桥接实现类

package blog;

/**
 * 具体实现
 */
public class ChineseCook implements Cook{
    @Override
    public void cook() {
        System.out.println("中餐");
    }
}

package blog;

/**
 * 具体实现
 */
public class EuropeanCook implements Cook{
    @Override
    public void cook() {
        System.out.println("西餐");
    }
}

3.3 使用 Cook 接口创建抽象类 Chef

package blog;

/**
 * 抽象接口
 */
public abstract class Chef {
    protected Cook cook;

    public Chef(Cook cook) {
        this.cook = cook;
    }

    protected abstract void cook();
}

3.4 创建实现了 Chef 抽象类的实体类

package blog;

/**
 * 扩展抽象
 */
public class AdvancedChef extends Chef{

    public AdvancedChef(Cook cook) {
        super(cook);
    }

    @Override
    protected void cook() {
        cook.cook();
    }
}

3.5 测试

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();
    }
}

网站公告

今日签到

点亮在社区的每一天
去签到