设计模式与应用:桥接模式

介绍

Bridge模式 桥接模式

构造型之一(结构型之一)

基于类的最小设计原则,通过使用封装,聚合以及继承等行为来让不同的类承担不同的责任,他的主要特点:

  • 是把抽象与行为实现分离开来,从而可以保持各部分的独立性以及应对他们的功能扩展

应用场景

  • 当数据结构和数据行为有多种组合情况时,可以使用桥接模式:把数据结构和其行为分离定义,然后数据结构维护数据行为抽象引用,使用时根据实际需要行为进行执行
  • 体现的是高内聚低耦合的思想

角色与职责

  • Client:使用者
  • Abstraction 抽象类接口,维护对行为实现(Implementor)的引用
  • Refined AbstractionAbstraction的子类
  • Implementor:行为实现类接口,定义操作
  • ConcreteImplementorImplementor子类

结构图

在这里插入图片描述

代码实现

在这里插入图片描述

  • Implementor

    /**
     * 角色:Implementor
     */
    public interface Engine {
    
        public void installEngine();
    }
    
  • ConcreteImplementor

    /**
     * 角色:ConcreteImplementor
     */
    public class Engine200 implements Engine{
        @Override
        public void installEngine() {
            System.out.println("安装200cc的引擎");
        }
    }
    
    /**
     * 角色:ConcreteImplementor
     */
    public class Engine300 implements Engine{
        @Override
        public void installEngine() {
            System.out.println("安装300cc的引擎");
        }
    }
    
  • Abstraction

    /**
     * 角色:Abstraction
     */
    public abstract class Car {
        private Engine engine;
    
        public Car(Engine engine) {
            this.engine = engine;
        }
    
        public Engine getEngine() {
            return engine;
        }
    
        public abstract void installEngine();
    }
    
    
  • Refined Abstraction

    /**
     * 角色:Refined Abstraction
     */
    public class BusCar extends Car{
        public BusCar(Engine engine) {
            super(engine);
        }
    
        @Override
        public void installEngine() {
            System.out.println("BusCar:");
            this.getEngine().installEngine();
        }
    }
    
    
    /**
     * 角色:Refined Abstraction
     */
    public class JeepCar extends Car{
        public JeepCar(Engine engine) {
            super(engine);
        }
    
        @Override
        public void installEngine() {
            System.out.println("JeepCar:");
            this.getEngine().installEngine();
        }
    }
    
    
  • Client

    /**
     * Client
     */
    public class ClientTest {
    
        public static void main(String[] args) {
            // 制作发动机
            Engine engine200 = new Engine200();
            Engine engine300 = new Engine300();
    
            // 制作bus车
            Car bus1 = new BusCar(engine200);
            bus1.installEngine();
            Car bus2 = new BusCar(engine300);
            bus2.installEngine();
    
            // 制作jeep车
            Car jeep1 = new JeepCar(engine200);
            jeep1.installEngine();
            Car jeep2 = new JeepCar(engine300);
            jeep2.installEngine();
    
        }
    
    }
    
    
  • 输出

    BusCar:
    安装200cc的引擎
    BusCar:
    安装300cc的引擎
    JeepCar:
    安装200cc的引擎
    JeepCar:
    安装300cc的引擎
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值