设计模式之桥接模式

桥接模式
Demo地址

https://github.com/rocky123shine/Bridge

定义

桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立地变化。
它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interface)模式。

桥接模式角色
  1. 抽象部分(抽象,接口)
  2. 优化抽象部分
  3. 实现部分抽象(抽象,接口)
  4. 实现部分具体实现
桥接模式的使用场景
  1. 开发中类的层次机构复杂
  2. 不同API间的桥接
  3. 一个类中存在两个独立的维度,且不同的维度都要扩展
桥接模式的简单设计和实现

模拟场景:客人去店买咖啡,咖啡有大中小杯,咖啡中可加东西和不加东西
首先分析角色:
该场景中有两个对象,咖啡和冰,关系是咖啡可以加入冰
那么我们按照桥接模式的角色,把角色归类:
咖啡为抽象角色,大中小杯为抽象部分的优化(实现部分)
冰为实现部分的抽象角色,加冰不加冰为实现部分抽象的具体实现

由于抽象类Coffee中持有实现部分抽象的对象那么就有实现部分抽象角色的接口

//添加物抽象
public interface AddIce {
    //添加的一些的逻辑或者动作的处理
    String  doSth();
}

有实现部分抽象对象后那么就有:抽象类Coffee

public abstract class Coffee {
    //Coffee 可以添加东西 这里我们持有添加物 的对象
    private AddIce addIce;
    public Coffee(AddIce additive){
        this.addIce = additive;
    }

    public AddIce getAdditive() {
        return addIce;
    }

    //做和咖啡相关的动作
    public abstract void drinkCoffee();
}

实现抽象的优化 大中小杯的实现(只写出一个,其他类似)

public class BigCoffee extends Coffee {
    public BigCoffee(AddIce additive) {
        super(additive);
    }

    @Override
    public void drinkCoffee() {
        Log.i("main", "大杯" + getAdditive().doSth() + "咖啡");

    }
}

实现部分抽象的具体实现(写一个)

public class Ice implements AddIce {
    @Override
    public String doSth() {
        return "记得加冰哦";
    }
}

最后我们测试一下,查看打印log

   BigCoffee coffee = new BigCoffee(new NoIce());
   coffee.drinkCoffee();

log结果为:大杯记得不加冰哦咖啡

这是如果我们给咖啡扩展功能,那么不会影响是否添加东西,同样,添加东西的扩展不会影响到咖啡,这样就实现了同一类的不同纬度的互不干扰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值