设计模式(7、桥接模式)

定义:抽象和接口脱耦,实现层和抽象层N-N关系
4个角色:一个抽象类、多个抽象子类、一个接口类、多个接口实现类
关系:抽象和接口是聚合关系,抽象类多态调用接口类的方法
具体实现:一个接口定义多个方法,多个接口实现类实现接口的方法,一个抽象类聚合接口,添加方法每个方法都组合方式调用接口方法,抽象的子类构造方法super(接口对象),"这里初始化抽象的接口属性,聚合和组合都可以",完成初始化抽象父类,完了之后,抽象子类就可以使用接口的方法了,聚合使用:抽象类对象 = new 抽象子类(接口实现类),组合使用:抽象类对象 = new 抽象子类(),抽象类对象.setter(接口实现类);然后抽象类对象就可以调用实现类的各种方法。
我的理解,有点像对象和对象间的N-N关系的中间桥接的作用,容易扩展,不会出现类爆炸;
例子:JDBC的DriverManger

demo理解:

炒粉老板的菜单:
口味:不辣、微辣、中辣
食材:河粉、米粉
如果枚举出所有口味和食材搭配的菜单列表,则菜单列表会很长很冗余,不辣的河粉、微辣的河粉、中辣的河粉、不辣的米粉、微辣的米粉、中辣的米粉;
使用桥接模式,则可以解决该问题,两个类独立变化,灵活扩展,减少它们之间的耦合。比如老板的菜单口味增加了特辣,食材增加了拉面,则仅需口味和食材各自扩展即可,互相不影响,避免出现菜单冗余;

UML类图:

代码实现:

package com.xiaomu.arithmetic.design.bridge;

/**
 * 接口-口味
 */
interface Taste {
    void print(String type);
}

/**
 * 具体实现-不辣
 */
class NoHot implements Taste {
    @Override
    public void print(String type) {
        System.out.println("不辣的" + type);
    }
}

/**
 * 具体实现-微辣
 */
class MildHot implements Taste {
    @Override
    public void print(String type) {
        System.out.println("微辣的" + type);
    }
}

/**
 * 具体实现-中辣
 */
class MediumHot implements Taste {
    @Override
    public void print(String type) {
        System.out.println("中辣的" + type);
    }
}

/**
 * 抽象-食材
 */
abstract class Food {
    Taste taste;

    public Food(Taste taste) {
        this.taste = taste;
    }

    public abstract void cooking();
}

/**
 * 抽象子类-河粉
 */
class Food1 extends Food {
    public Food1(Taste taste) {
        super(taste);
    }

    @Override
    public void cooking() {
        taste.print("河粉");
    }
}

/**
 * 抽象子类-米粉
 */
class Food2 extends Food {
    public Food2(Taste taste) {
        super(taste);
    }

    @Override
    public void cooking() {
        taste.print("米粉");
    }
}

public class BridgeModel {
    public static void main(String[] args) {
        Food food1 = new Food1(new MildHot());
        Food food2 = new Food2(new MediumHot());

        food1.cooking();
        food2.cooking();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小绿豆

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值