赞
踩
目录
桥接(Bridge)模式是用于把抽象化与实现化解耦,使得二者可以独立变化。把抽象(abstraction)与行为实现(implementation)分离开来,从而可以保持各部分的独立性以及应对它们的功能扩展。其归属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。
说⽩了核⼼实现也就是在A类中含有B类接口,通过构造函数传递B类的实现,这个B类就是设计的桥 。
桥接模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。
举例说明:现需要提供大中小3种型号的画笔,能够绘制5种不同颜色,如果使用蜡笔,我们需要准备3*5=15支蜡笔,也就是说必须准备15个具体的蜡笔类。而如果使用毛笔的话,只需要3种型号的毛笔,外加5个颜料盒,用3+5=8个类就可以实现15支蜡笔的功能。
场景: 一个甜品蛋糕店,售卖的食品有蛋糕、奶茶和牛奶,但是每个商品都有各种口味:草莓味、蓝莓味、香蕉味。
食品又新增了提拉米苏,口味又新增了芒果,难道要把商品和口味再全部绑定一套吗?
显然这种两个维度扩展的情况不适合这种方案。那我们另辟蹊径,创建两个父类,一个食品类一个水果类。两个父类各自包含了相应的子类,然后根据需要将食品和水果进行组合。如下:
实现角色
- /**
- * @author Evan Walker 昂焱数据: https://www.ayshuju.com
- * @version 1.0
- * @desc 水果
- * @date 2023/07/09 14:08:10
- */
- public interface Fruit {
- /**
- * 被添加
- *
- * @param food
- */
- void doAdd(String food);
-
- }
抽象角色
- /**
- * @author Evan Walker 昂焱数据: https://www.ayshuju.com
- * @version 1.0
- * @desc 食物
- * @date 2023/07/09 14:07:35
- */
- public abstract class Food {
- /**
- * 水果
- */
- Fruit fruit;
-
- public void setFruit(Fruit fruit) {
- this.fruit = fruit;
- }
-
- /**
- * 制作时添加
- */
- public abstract void add();
- }
拓展抽象角色
-
- /**
- * @author Evan Walker 昂焱数据: https://www.ayshuju.com
- * @version 1.0
- * @desc 蛋糕
- * @date 2023/07/09 14:16:51
- */
- public class Cake extends Food{
- @Override
- public void add() {
- fruit.doAdd("蛋糕");
- }
- }
- public class Milk extends Food{
-
- @Override
- public void add() {
- fruit.doAdd("牛奶");
- }
- }
具体实现角色
- /**
- * @author Evan Walker 昂焱数据: https://www.ayshuju.com
- * @version 1.0
- * @desc 香蕉
- * @date 2023/07/09 14:09:02
- */
- public class Banana implements Fruit{
-
- @Override
- public void doAdd(String food) {
- System.out.println("香蕉" + food);
- }
- }
- public class Blueberry implements Fruit{
- @Override
- public void doAdd(String food) {
- System.out.println("蓝莓"+food);
- }
- }
- public class Strawberry implements Fruit {
-
- @Override
- public void doAdd(String food) {
- System.out.println("草莓" + food);
- }
- }
测试类
- /**
- * @author Evan Walker 昂焱数据: https://www.ayshuju.com
- * @version 1.0
- * @desc 测试类
- * @date 2023/07/09 14:21:58
- */
- public class Test {
-
- public static void main(String[] args) {
- //蛋糕
- Fruit blueberry = new Blueberry();
- Food cake = new Cake();
- cake.setFruit(blueberry);
- cake.add();
-
- //牛奶
- Food milk = new Milk();
- milk.setFruit(blueberry);
- milk.add();
- }
-
- }
测试结果
希望大家记住编程中的一条原则:多用组合,少用继承。
更多消息资讯,请访问昂焱数据(https://www.ayshuju.com)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。