美文网首页
桥接模式

桥接模式

作者: Crazy贵子 | 来源:发表于2018-05-17 17:00 被阅读0次

桥接模式

定义

将抽象和实现解耦,使得两者可以独立变化。
有点抽象,大家先继续往下看吧。

通用类图

通用类图.png

类说明

  1. Implementor 实现化角色
    是一个接口或者抽象类,定义角色的属性和行为

  2. ConcrecteImplement 具体实现化角色
    实现相应的行为

  3. Abstraction 抽象化角色
    定义出该角色的行为,同时保存一个实现化角色的引用

  4. RefinedAbstracton
    实现抽象化角色,利用实现化角色引用修正父类的行为

通用代码

// 定义实现化角色
public interface Implementor {
    void doSomething();
    void doAnything();
}

// 具体实现化
public class ConcreteImplementor implements Implementor {
    @Override
    public void doSomething() {
        // 业务逻辑
    }

    @Override
    public void doAnything() {
        // 业务逻辑
    }
}

// 抽象角色
public class Abstraction {
    private Implementor implementor;

    public Abstraction(Implementor implementor) {
        this.implementor = implementor;
    }

    // 自身的行为属性
    public void request() {
        this.implementor.doSomething();
    }

    public Implementor getImplementor() {
        return this.implementor;
    }
}

// 具体抽象
public class RefinedAbstraction extends Abstraction {

    public RefinedAbstraction(Implementor implementor) {
        super(implementor);
    }

    // 修正父类行为
    @Override
    public void request() {
        // 业务处理
        super.request();
        getImplementor().doAnything();
    }
}

// 客户端
public class Client {

    public static void main(String[] args) {
        Implementor imp = new ConcreteImplementor();
        Abstraction abstraction = new RefinedAbstraction(imp);
        abstraction.request();
    }
}

样例展示

一个咖啡店可以提供大杯(JorumCoffee)、中杯(MediumCoffee)、小杯(SmallCoffee)的咖啡(Coffee),为了满足不同用户的口味,在咖啡中可以添加牛奶(Milk),或者糖(Sugar),或者柠檬(Lemon),提供给用户不同口味的组合,如大杯咖啡加牛奶,中杯咖啡加糖,小杯咖啡加柠檬,小杯咖啡加糖等。

样例类图

样例类图.png

由类图可以很容易看出整个框架,回到最开始的定义:将抽象和现实解耦,使得两者可以独立变化。这里的抽象就是Coffee,而实现就是Flavor。如果按照正常的写法,在Coffee类中创建三种口味的方法,然后创建三个大、中、小杯咖啡,这样一来三个子类都得实现三种口味方法,也许大杯咖啡没有柠檬味的怎么办呢?所以,利用桥接模式来解决这多种组合问题,要是再来一种口味也很简单,实现Flavor接口就可以了。用户只需要创建相应的口味添加到咖啡中即可,降低了咖啡对口味的耦合度。

代码实现

// 佐料类
public interface Flavor {
    void taste(); // 口味
}

// 具体实现
public class Milk implements Flavor {
    @Override
    public void taste() {
        System.out.println("牛奶味的");
    }
}

public class Lemon implements Flavor {
    @Override
    public void taste() {
        System.out.println("柠檬味的");
    }
}

public class Sugar implements Flavor {
    @Override
    public void taste() {
        System.out.println("糖味,甜甜的");
    }
}

// 咖啡
public abstract class Coffee {
    private Flavor flavor;

    public Coffee(Flavor flavor) {
        this.flavor = flavor;
    }

    public void add() {
        flavor.taste();
    }
}

// 大、中、小杯
public class BigCup extends Coffee {

    public BigCup(Flavor flavor) {
        super(flavor);
    }

    @Override
    public void add() {
        System.out.println("这是大杯咖啡");
        super.add();
    }
}

public class MiddleCup extends Coffee {

    public MiddleCup(Flavor flavor) {
        super(flavor);
    }

    @Override
    public void add() {
        System.out.println("这是中杯咖啡");
        super.add();
    }
}

public class SmallCup extends Coffee {

    public SmallCup(Flavor flavor) {
        super(flavor);
    }

    @Override
    public void add() {
        System.out.println("这是小杯咖啡");
        super.add();
    }
}

// 客户端调用
public class Client {

    public static void main(String[] args) {
        Flavor milk = new Milk();
        Coffee big = new BigCup(milk);
        big.add();

        Flavor lemon = new Lemon();
        Coffee small = new SmallCup(lemon);
        small.add();
    }
}

本文为《设计模式之禅》读后笔记总结

相关文章

  • 设计模式-桥接模式

    设计模式-桥接模式 定义 桥接模式(Bridge Pattern)也称为桥梁模式、接口(Interface)模式或...

  • 结构型模式:桥接模式

    文章首发:结构型模式:桥接模式 七大结构型模式之二:桥接模式。 简介 姓名 :桥接模式 英文名 :Bridge P...

  • 设计模式之桥接模式

    设计模式之桥接模式 1. 模式定义 桥接模式又称柄体模式或接口模式,它是一种结构性模式。桥接模式将抽象部分与实现部...

  • 06-01-001 虚拟机的网络连接方式(转运整理)

    一、Bridged(桥接模式) 什么是桥接模式?桥接模式就是将主机网卡与虚拟机虚拟的网卡利用虚拟网桥进行通信。在桥...

  • 桥接模式与中介模式

    桥接模式-BRIDGE 对桥接模式感兴趣,是因为公司业务上需要桥接Html5和ReactNative两个平台。桥接...

  • 设计模式——桥接模式

    设计模式——桥接模式 最近公司组件分享设计模式,然而分配给我的是桥接模式。就在这里记录我对桥接模式的理解吧。 定义...

  • 桥接模式

    个人博客http://www.milovetingting.cn 桥接模式 模式介绍 桥接模式也称为桥梁模式,是结...

  • 桥接模式

    桥接模式 参考原文: https://zhuanlan.zhihu.com/p/62390221 定义 桥接模式 ...

  • 10-桥接模式

    桥接模式-Bridge Pattern【学习难度:★★★☆☆,使用频率:★★★☆☆】 处理多维度变化——桥接模式(...

  • Java设计模式——桥接模式

    Java设计模式之桥接模式 回顾 上一期分享了适配器模式,主要为了实现解耦 桥接模式 简介 桥接模式是对象的结构模...

网友评论

      本文标题:桥接模式

      本文链接:https://www.haomeiwen.com/subject/gjxidftx.html