桥接模式,要从《诛仙》说起!

在这里插入图片描述

弟弟抱怨:今天的业务有好多类啊!好烦啊!

我:业务不是有好多可以归类的吗?你可以使用桥接模式来减少代码量!

弟弟:说说看!

我:要说桥接模式,还需从《诛仙》和修真说起!

弟弟:这个好,这个好,玄幻修真是吾平生所爱。

我:你应该知道,修真的辅助职业有多条路可走

弟弟:炼丹,练器,练阵,御兽…

我:没错,修真界还有门派之分,比如《诛仙》

弟弟:我知道,青云门,天音寺,焚香谷…

我:那这些和桥接模式有什么关系呢?先来看张图
在这里插入图片描述

从图中我们可以看出,丹药分为青云门丹药,天音寺丹药,焚香谷丹药;

阵法分为青云门阵法,天音寺阵法。。。。

这样如果要新增加一类商品,每个门派都要增加,或者有个新的门派,就要新增加三种商品。扩展不方便,复用性差。

这时可以使用桥接模式,将维度分开。定义门派类别和商品类别,通过组合的方法,将两者联系在一起,形成桥接。看图!看图!

在这里插入图片描述

具体方法分三步:

  1. 将许多二维的概念拆分成一维;
  2. 其中一个维度实现同一个接口
  3. 类外一个维度继承同一父类,父类组合接口。

从图中看这九种商品存在着关系,也就是种类和门派互相组合而成。

看代码:

/**
 * 商品类型维度
 *
 * @author czy
 * @date 2021/6/22
 */
public interface Goods {
    void buy();
}

/**
 * 丹药
 */
class Elixir implements Goods{

    @Override
    public void buy() {
        System.out.print("丹药");
    }
}

/**
 * 阵法
 */
class ZhenFa implements Goods{

    @Override
    public void buy() {
        System.out.print("炼药");
    }
}

/**
 * 练器
 */
class LianQi implements Goods{

    @Override
    public void buy() {
        System.out.print("练器");
    }
}
/******************************************************************************/
/**
 * 宗门维度
 *
 * @author czy
 * @date 2021/6/22
 */
public abstract class Sect {
    protected Goods goods;

    public Sect() {
    }

    public void setGoods(Goods goods) {
        this.goods = goods;
    }

    /**
     * 获取宗门信息
     */
    abstract void brand();
}

/**
 * 青云门
 */
class QYM extends Sect{

    public QYM() {
    }

    @Override
    void brand() {
        System.out.print("青云门的");
        super.goods.buy();
    }
}

/**
 * 天音寺
 */
class  TYS extends Sect{
    public TYS(){}


    @Override
    void brand() {
        System.out.print("天音寺的");
        super.goods.buy();
    }
}

/**
 * 焚香谷
 */
class FXG extends Sect{
    public FXG() {
    }

    @Override
    void brand() {
        System.out.print("焚香谷的");
        super.goods.buy();
    }
}
/*************************************************************************************/

/**
 * 顾客测试
 *
 * @author czy
 * @date 2021/6/22
 */
public class Client {
    public static void main(String[] args) {
        //我需要丹药
        Elixir elixir = new Elixir();
        //听说青云门的好
        QYM qym = new QYM();
        qym.setGoods(elixir);
        System.out.print("我要买");
        qym.brand();
    }
}

弟弟:这个方法不错哦!我先试为强。

我:且慢,桥接模式优点是有的,但是也有缺点。听我说完你再试。桥接模式的引入增加了系统的理解和设计难度,由于聚合关联关系建立在抽象层,要求开发者这对抽象进行设计与编程。* 桥接模式要求正确识别出系统中两个独立变化的维度,因此其适用范围具有一定的局限性。局限在维度上。你感觉合适才能用!

弟弟:中中中!我着了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值