设计模式之桥接模式(未使用桥接模式、使用桥接模式、源码体现)

简介: 设计模式之桥接模式(未使用桥接模式、使用桥接模式、源码体现)

桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使它们都可以独立地变化。

这句话现在看还是很抽象,我们先看一个例子。

我们有两种咖啡、拿铁和美式。

对于咖啡,我们提供两种可添加的选项,分别是加奶和加糖。

这样我们就有了四种选项,拿铁加奶、拿铁加糖、美式加奶、美式加糖

假如说我们不用设计模式会怎么样呢

未使用设计模式

/**
 * 咖啡接口:可以加奶加糖
 */
public interface Coffee {
    void add();
}
public class MCoffeeSugar implements Coffee {
    @Override
    public void add() {
        System.out.println("美式加糖");
    }
}
class MCoffeeMilk implements Coffee {
    @Override
    public void add() {
        System.out.println("美式加奶");
    }
}
class latteCoffeeSugar implements Coffee {
    @Override
    public void add() {
        System.out.println("拿铁加糖");
    }
}
class latteCoffeeMilk implements Coffee {
    @Override
    public void add() {
        System.out.println("拿铁加奶");
    }
}
public static void main(String[] args) {
    /**
     * 结果为:
     * 美式加奶
     * 美式加糖
     * 拿铁加糖
     * 拿铁加奶
     */
    MCoffeeMilk mCoffeeMilk = new MCoffeeMilk();
    mCoffeeMilk.add();
    MCoffeeSugar mCoffeeSugar = new MCoffeeSugar();
    mCoffeeSugar.add();
    latteCoffeeSugar latteCoffeeSugar = new latteCoffeeSugar();
    latteCoffeeSugar.add();
    latteCoffeeMilk latteCoffeeMilk = new latteCoffeeMilk();
    latteCoffeeMilk.add();
}

这里就是一个2*2的组合,一旦是3*3、4*4 那么我们的类将几何倍的增加。

使用桥接模式

public class Milk implements CoffeeAdd{
    @Override
    public String add() {
        return "加奶";
    }
}
public class Sugar implements CoffeeAdd{
    @Override
    public String add() {
        return "加糖";
    }
}
public interface CoffeeAdd {
    String add();
}
public abstract class Coffee {
    private CoffeeAdd coffeeAdd;
    Coffee(CoffeeAdd coffeeAdd) {
        this.coffeeAdd = coffeeAdd;
    }
    public abstract void show();
    public CoffeeAdd getCoffeeAdd() {
        return coffeeAdd;
    }
    public void setCoffeeAdd(CoffeeAdd coffeeAdd) {
        this.coffeeAdd = coffeeAdd;
    }
}
public class latteCoffee extends Coffee{
    latteCoffee(CoffeeAdd coffeeAdd) {
        super(coffeeAdd);
    }
    @Override
    public void show() {
        System.out.println("拿铁咖啡"+super.getCoffeeAdd().add());
    }
}
public class MCoffee extends Coffee{
    MCoffee(CoffeeAdd coffeeAdd) {
        super(coffeeAdd);
    }
    @Override
    public void show() {
        System.out.println("美式咖啡"+super.getCoffeeAdd().add());
    }
}
public class Client {
    public static void main(String[] args) {
        Milk milk = new Milk();
        Sugar sugar = new Sugar();
        /**
         * 结果为:
         * 美式咖啡加奶
         * 美式咖啡加糖
         * 拿铁咖啡加奶
         * 拿铁咖啡加糖
         */
        new MCoffee(milk).show();
        new MCoffee(sugar).show();
        new latteCoffee(milk).show();
        new latteCoffee(sugar).show();
    }
}

我们把咖啡的种类作为抽象部分,把加糖加奶作为实现部分,在这两个维度中,无论谁发生了变化,都可以自由进行组合。

源码体现

可以参考该博客

https://blog.csdn.net/a745233700/article/details/120271538?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2aggregatepagefirst_rank_ecpm_v1~rank_v31_ecpm-17-

120271538.pc_agg_new_rank&utm_term=%E6%A1%A5%E6%8E%A5%E6%A8%A1%E5%BC%8F%E5%9C%A8%E6%BA%90%E7%A0%81%E4%B8%AD%E7%9A%84%E4%BD%BF%E7%94%A8&spm=1000.2123.3001.4430

相关文章
|
1月前
|
设计模式
设计模式之桥接模式
设计模式之桥接模式
|
1月前
|
设计模式 Linux Windows
【设计模式】桥接模式
【设计模式】桥接模式
|
2月前
|
设计模式 Oracle Java
设计模式--- 桥接模式、JDBC 源码剖析(桥接)
设计模式--- 桥接模式、JDBC 源码剖析(桥接)
50 2
|
4月前
|
设计模式 API 开发者
ZStack源码剖析之设计模式鉴赏——三驾马车
随着ZStack的版本迭代,其可以掌管的资源也越来越多。但新增模块的结构却还是大致相同,此即是ZStack的经典设计模式——这套模式也被开发者称为ZStack三驾马车。
47 2
|
4月前
|
设计模式 前端开发
二十三种设计模式全面解析-深入解析桥接模式:解锁软件设计的灵活性
二十三种设计模式全面解析-深入解析桥接模式:解锁软件设计的灵活性
|
4月前
|
设计模式 Java 开发者
Java设计模式【七】:桥接模式
Java设计模式【七】:桥接模式
20 0
|
5月前
|
设计模式 Java 关系型数据库
认真学习设计模式之桥接模式(Bridge Pattern)
认真学习设计模式之桥接模式(Bridge Pattern)
36 0
|
3天前
|
设计模式 算法 Java
[设计模式Java实现附plantuml源码~行为型]定义算法的框架——模板方法模式
[设计模式Java实现附plantuml源码~行为型]定义算法的框架——模板方法模式
|
3天前
|
设计模式 JavaScript Java
[设计模式Java实现附plantuml源码~行为型] 对象状态及其转换——状态模式
[设计模式Java实现附plantuml源码~行为型] 对象状态及其转换——状态模式
|
3天前
|
设计模式 存储 JavaScript
[设计模式Java实现附plantuml源码~创建型] 多态工厂的实现——工厂方法模式
[设计模式Java实现附plantuml源码~创建型] 多态工厂的实现——工厂方法模式