桥接模式——连接抽象维度和实现维度

这篇具有很好参考价值的文章主要介绍了桥接模式——连接抽象维度和实现维度。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

桥接模式 bridge pattern

一 定义

桥接模式,是将抽象部分与它的具体实现部分分离,使它们都可以独立地变化。它是将两个不同的维度建立联系。这两个维度通常是指:抽象维度和实现维度。

使用场景

  1. 在抽象和具体实现之间需要增加更多的灵活性的场景。
  2. 一个类存在两个(或多个)独立变化的维度,而这两个(或多个)维度都需要独立进行扩展。
  3. 不希望使用继承,尤其是多层继承。

标准示例

桥接模式——连接抽象维度和实现维度,Java设计模式(示例讲解),桥接模式
如类图所示:
AbstractionRefinedAbstraction 是抽象维度体系;
IimplementorConcreteImplementorA ConcreteImplementorB 是实现维度体系;
Abstraction 作为桥梁,将抽象维度和实现维度进行了连接。

更多示例

接下来我们来举两个例子说明桥接模式的使用。


第一个例子是 快餐店。
众所周知,比较知名的洋快餐有:肯德基、麦当劳、汉堡王等等。
他们都属于快餐品牌。所以我们创建一个快餐店的抽象类:FastRestaurant。
然后让 KFCRestaurant、McRestraurant、继承FastRestaurant。
各个快餐店都有自己的薯条和可乐。

接下来,我们做三件事情:
第一件事情:
所以我们创建薯条接口(Frenchfries)和可乐接口(Cola),
薯条接口里有个吃薯条的方法;可乐接口里有个喝可乐的方法。
并创建每个品牌的薯条和可乐的实现(因为每家店的食品都有自己的特点):
KfcCola、KfcFrenchfries
McCola、McFrenchfries

//薯条接口
public interface Frenchfries {
	//吃薯条
    void eatFrenchfries();
}

//可乐接口
public interface Cola {
	//喝可乐
    void drinkCola();
}
//KFC的cola
public class KfcCola implements Cola{
    @Override
    public void drinkCola() {
        System.out.println("Drink KFC's cola.");
    }
}
//KFC的薯条
public class KfcFrenchfries implements Frenchfries{
    @Override
    public void eatFrenchfries() {
        System.out.println("Eat KFC's French fries.");
    }
}
//麦当劳的可乐
public class McCola implements Cola{
    @Override
    public void drinkCola() {
        System.out.println("Drink McDonald's cola");
    }
}
//麦当劳的薯条
public class McFrenchfries implements Frenchfries{
    @Override
    public void eatFrenchfries() {
        System.out.println("Eat McDonald's French fries.");
    }
}

第二件事情:
我们给FastRestaurant
① 增加两个属性,可乐和薯条。
② 增加两个方法:喝可乐(getCola)、吃薯条(getFrenchfries)。

//快餐店(抽象类)
public abstract class FastRestaurant {
	//可乐
    protected Cola cola;
    //薯条
    protected Frenchfries frenchfries;

	//构造函数给属性赋值
    public FastRestaurant(Cola cola,Frenchfries frenchfries){
        this.cola = cola;
        this.frenchfries = frenchfries;
    }
	//喝可乐
    public void drinkCola(){
        this.cola.drinkCola();
    }
    //吃薯条
    public void eatFrenchfries(){
        this.frenchfries.eatFrenchfries();
    }
}

第三件事情:
然后让各品牌都继承抽象类FastRestaurant。

//KFC
public class KfcRestaurant extends FastRestaurant{
    public KfcRestaurant(Cola cola, Frenchfries frenchfries) {
        super(cola, frenchfries);
    }
}
//麦当劳
public class McRestaurant extends FastRestaurant{
    public McRestaurant(Cola cola, Frenchfries frenchfries) {
        super(cola, frenchfries);
    }

}

接下来,我们要去KFC吃汉堡和可乐:

public class MainTest {
    public static void main(String[] args) {
        Cola cola = new KfcCola();
        Frenchfries frenchfries = new KfcFrenchfries();
        FastRestaurant restaurant = new KfcRestaurant(cola,frenchfries);
        restaurant.drinkCola();
        restaurant.eatFrenchfries();
    }
}

执行后的输出结果:

Drink KFC's cola.
Eat KFC's French fries.

上述洋快餐的例子中,抽象的快餐店(FastRestaurant)充当了桥梁,连接了具体的快餐店(fcRestaurant)和 Cola、Frenchfries接口的实现(KfcCola、KfcFrenchfries)
我们来看类图:
桥接模式——连接抽象维度和实现维度,Java设计模式(示例讲解),桥接模式


我们再举个例子。
我们在购物时,经常有各种优惠活动。
比如满100减10,就是满金额直减;比如满200打8折,就是满金额折扣;比如满10件打9折,就是满数量折扣。
不难发现,就上述三种优惠来说,它是由条件规则+优惠 组成的。
我们把“满100”称为 rule,把“减10”称为 promotion。
下面来讲我们如何实现这些优惠。
首先我们定义一个抽象的条件规则类:AbstractRule

//抽象规则类
public abstract class AbstractRule {
	//优惠
    protected IPromotion promotion;
    //规则名称
    protected String rule;
	//通过构造方法赋值
    public AbstractRule(IPromotion promotion,String rule){
        this.rule = rule;
        this.promotion = promotion;
    }
    //获取优惠
    public void getPromo(){
        this.promotion.getPromotion(rule);
    }
}

接下来,我们定义优惠接口。

//优惠接口
public interface IPromotion {
	//获取优惠
    void getPromotion(String rule);
}

然后给出具体的条件规则:满金额的规则和满数量的规则。

//满金额规则类
public class FullAmountRule extends AbstractRule{
    public FullAmountRule(IPromotion promotion,String rule) {
        super(promotion,rule);
    }
}

//满数量规则类
public class FullQuantityRule extends AbstractRule{
    public FullQuantityRule(IPromotion promotion,String rule) {
        super(promotion,rule);
    }
}

紧接着是要给出优惠接口的实现:直减优惠和折扣优惠。

public class DirectAmount implements IPromotion{
    @Override
    public void getPromotion(String rule) {
        System.out.println(rule + " direct reduce amount");
    }
}

public class Discount implements IPromotion{
    @Override
    public void getPromotion(String rule) {
        System.out.println(rule + " discount.");
    }
}

最后,我们来看一下这个优惠规则的实际使用效果:

public class MainTest {
    public static void main(String[] args) {
        //满金额
        String rule = "Full amount";
        //直减
        IPromotion promotion = new Discount();
        //优惠
        AbstractRule theRule = new FullAmountRule(promotion,rule);
        
        theRule.getPromo();
    }
}

执行后的输出结果:

Full amount discount.

同样给出类图,发现与上面的图很相似(这就是桥接的模样):
桥接模式——连接抽象维度和实现维度,Java设计模式(示例讲解),桥接模式


以上就是桥接模式的全部内容,欢迎阅读。文章来源地址https://www.toymoban.com/news/detail-580191.html

到了这里,关于桥接模式——连接抽象维度和实现维度的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java设计模式-桥接模式

    桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立地变化。 这个概念听着那是相当拗口了,其实通过例子解释后,就能很好的理解了。 下面先看一个例子,这个例子表现了手机与手机软件之间的关系 2.1HandsetSoft类 这个类是手机软件的抽象类 2.2HandSetGame类 这个是

    2024年02月16日
    浏览(43)
  • Java设计模式之 -- 桥接模式

    桥接模式是一种结构型设计模式,也被称为“Handle/Body”。这种设计模式主要用于将抽象部分与它的实现部分分离,使它们可以独立地变化。这种方式有助于减少系统中的耦合性,增加了扩展性。 桥接模式主要解决的是类的维度扩展问题。在一个多维度变化的类中,使用继承

    2024年02月15日
    浏览(40)
  • Java 设计模式之桥接模式

    桥接模式是一种结构设计模式,它的目标是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过将继承关系改为组合关系来实现解耦。 在Java中,桥接模式的实现通常涉及两个层次结构:抽象类和具体实现类。抽象类表示抽象部分,而具体实现类表示实现部分

    2024年02月09日
    浏览(44)
  • Java设计模式-抽象工厂模式

    设计模式是软件设计中的一种常见方法,通过定义一系列通用的解决方案,来解决常见的软件设计问题。其中,抽象工厂模式是一种非常常见的设计模式,它可以帮助我们创建一组相关的对象,而不需要指定具体的实现方式。 抽象工厂模式是一种创建型设计模式,它提供了一

    2024年02月01日
    浏览(44)
  • java设计模式【抽象工厂模式】

    抽象工厂模式 是对简单工厂模式的一个变种,它允许通过一个统一的接口来创建不同的产品实例,而无需指定具体的子类。在这个模式中,我们只关心产品的抽象接口,而将具体的产品实现留给子类去实现。这样,我们可以通过创建不同的工厂对象来创建不同的产品实例,而

    2024年02月05日
    浏览(48)
  • Java与设计模式(8):桥接模式

    桥接模式(Bridge Pattern)是一种软件设计模式,它用于将抽象部分与实现部分分离,使它们可以独立地变化。该模式通过将抽象类与实现类之间建立一个桥接(Bridge)来实现解耦,使得抽象部分和实现部分可以独立地进行扩展。 在桥接模式中,抽象部分由一个抽象类或接口表

    2024年02月11日
    浏览(42)
  • Java特性之设计模式【抽象工厂模式】

    概述 抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式 在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。

    2024年02月10日
    浏览(38)
  • 【Java 设计模式】结构型之桥接模式

    桥接模式(Bridge Pattern)是一种结构型设计模式, 它将抽象部分与实现部分分离,使它们可以独立变化,从而降低它们之间的耦合 。桥接模式通过将抽象部分和实现部分分离,使得它们可以独立地变化,同时在它们之间建立一个桥梁。在本文中,我们将介绍 Java 中桥接模式的

    2024年01月19日
    浏览(46)
  • 【Java 设计模式】创建型之抽象工厂模式

    在软件开发中,抽象工厂模式是一种常见的创建型设计模式, 它提供了一种创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类 。抽象工厂模式的核心思想是将一组相关的产品组合成一个工厂,客户端通过工厂接口创建一系列产品。在本文中,我们将介绍 Jav

    2024年01月17日
    浏览(80)
  • 手写Java设计模式之抽象工厂模式,附源码解读

    接上篇,抽象工厂模式将汽车的一些属性可以抽象出来,可以理解为给不同汽车品牌生成时加上不同的特性,如颜色等,具体代码如下: 引入颜色接口: 将颜色与汽车生成品牌抽象出来,增加抽象类: 继承抽象类,分别对不同属性的特征进行操作,如涂上颜色等,首先实现

    2024年04月25日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包