首页 > 其他分享 >08_桥接模式

08_桥接模式

时间:2024-03-10 11:46:52浏览次数:19  
标签:桥接 08 模式 实现 coffeeBase CoffeeBase new public

桥接模式是一种结构型设计模式,它将抽象和实现分离,使它们可以独立地变化。桥接模式通过将实现细节从抽象中分离出来,使得抽象和实现可以独立地进行扩展和修改。

桥接模式有四个主要角色:

  1. 抽象类(Abstraction):定义了抽象类的接口,并包含一个对实现类的引用。

  2. 实现类接口(Implementor):定义了实现类的接口,具体实现留给具体的实现类。

  3. 具体实现类(Concrete Implementor):实现实现类接口,并提供具体的实现逻辑。

  4. 修正抽象类(Refined Abstraction):扩展抽象类,提供更多特定功能的方法。

桥接模式的工作原理如下:

  1. 抽象类包含一个对实现类接口的引用,通过该引用调用实现类的方法。

  2. 实现类接口定义了具体实现类的方法。

  3. 具体实现类实现实现类接口,并提供具体的实现逻辑。

  4. 修正抽象类扩展了抽象类,可以提供更多特定功能的方法。

桥接模式的优点包括:

  1. 可以将抽象和实现解耦,使它们可以独立地进行变化。

  2. 可以提高系统的可扩展性,可以方便地添加新的抽象类和实现类。

  3. 可以在运行时动态地将抽象和实现进行组合。

桥接模式适用于以下场景:

  1. 当需要在抽象和实现之间存在多对多的关系时,可以使用桥接模式。

  2. 当需要将抽象和实现分离,使它们可以独立地进行变化时,可以使用桥接模式。

总结而言,桥接模式通过将抽象和实现分离,使它们可以独立地进行变化。它提供了一种解决抽象和实现之间耦合关系的方式,提高了系统的可扩展性和灵活性。

 

以一杯咖啡为例,以容量为中杯和大杯,以口味分为原味,加奶,加糖。
实际上最终顾客可以买到6种咖啡。它们分别是:
中杯原味,中杯加奶,中杯加糖。
大杯原味,大杯加奶,大杯加糖。
中杯、大杯(抽象)
原味,加奶,加糖(行为)

 

Implementor

/// <summary>
    /// 行为层接口
    /// </summary>
    public abstract  class CoffeeBase
    {
        /// <summary>
        /// 制作咖啡
        /// </summary>
        /// <returns></returns>
        public abstract string Making();
    }

 

Concrete Implementor

public class MilkCoffee : CoffeeBase
    {
        public override string Making()
        {
            return "牛奶咖啡";
        }
    }
public class OriginalCoffee : CoffeeBase
    {
        public override string Making()
        {
            return "原味咖啡";
        }
    }
public class SugarCoffee : CoffeeBase
    {
        public override string Making()
        {
            return "加糖咖啡";
        }
    }

 

Abstraction

/// <summary>
    /// 抽象层接口
    /// </summary>
    public abstract  class CupBase 
    {
        private CoffeeBase coffeeBase;

        public CupBase(CoffeeBase coffeeBase)
        {
            this.coffeeBase = coffeeBase;
        }

        public CoffeeBase CoffeeBase()
        {
            return coffeeBase;
        }

        /// <summary>
        /// 这个方法调用CoffeeBase里面的成员
        /// </summary>
        public abstract void Sale();

        public void SetCoffee(CoffeeBase coffeeBase)
        {
            this.coffeeBase=coffeeBase;
        }
    }

 

实现CupBase

/// <summary>
    /// 中杯咖啡
    /// </summary>
    public class MediumCupCoffee : CupBase
    {
        public MediumCupCoffee(CoffeeBase coffeeBase) : base(coffeeBase)
        {
        }

        public override void Sale()
        {
            string result = $"中杯{this.CoffeeBase().Making()}";
            Console.WriteLine(result);
        }
    }
/// <summary>
    /// 大杯咖啡
    /// </summary>
    public class LargeCupCoffee : CupBase
    {
        public LargeCupCoffee(CoffeeBase coffeeBase) : base(coffeeBase)
        {
        }

        public override void Sale()
        {
            string result = $"大杯{this.CoffeeBase().Making()}";
            Console.WriteLine(result);
        }
    }

 

Refined Abstraction

public class Cup : CupBase
    {
        public Cup(CoffeeBase coffeeBase) : base(coffeeBase)
        {
        }

        public override void Sale()
        {
            Console.WriteLine("统一正常杯"+CoffeeBase().Making());
        }
    }

 

调用

internal class Client
    {
        public void Start()
        {
            Console.WriteLine("顾客A想买大杯加糖的咖啡");
            var largeCupCoffee = new LargeCupCoffee(new SugarCoffee());
            largeCupCoffee.Sale();

            Console.WriteLine("顾客B想买大杯加奶的咖啡");
            var milkCupCoffee = new LargeCupCoffee(new MilkCoffee());
            milkCupCoffee.Sale();

            Console.WriteLine("顾客C想买大杯原味的咖啡");
            var originaeCupCoffee = new LargeCupCoffee(new OriginalCoffee());
            originaeCupCoffee.Sale();

            Console.WriteLine("---------------------------------------------------");


            CupBase cup = new Cup(null);

            cup.SetCoffee(new SugarCoffee());
            cup.Sale();

            cup.SetCoffee(new MilkCoffee());
            cup.Sale();

            cup.SetCoffee(new OriginalCoffee());
            cup.Sale();
        }
    }
static void Main(string[] args)
        {
            new Client().Start();

            Console.ReadKey();
        }

 

标签:桥接,08,模式,实现,coffeeBase,CoffeeBase,new,public
From: https://www.cnblogs.com/MingQiu/p/18063917

相关文章

  • 07_适配器模式
    适配器模式是一种结构型设计模式,它通过将一个类的接口转换成客户端所期望的另一个接口,使得原本由于接口不兼容而不能一起工作的类能够协同工作。适配器模式有三个主要角色:目标接口(Target):定义了客户端所期望的接口。源接口(Adaptee):需要被适配的类或接口。适配器(Adapter):将......
  • STM32的3种启动模式
    STM32的3种启动模式STM32启动模式介绍各种模式介绍boot0=0Flashmemory启动方式启动地址:0x08000000是STM32内置的Flash,一般我们使用JTAG或者SWD模式下载程序时,就是下载到这个里面,重启后也直接从这启动程序。基本上都是采用这种模式。boot0=1;boot1=0System......
  • 08_Linux帮助手册讲解
    Linux帮助手册讲解1.Linux帮助手册使用man命令打开,使用手册一共有九页。1.可执行的程序或者shell命令2.系统调用3.库调用4.设备和特殊文件的帮助,通常在/dev下面5.配置文件的帮助6.游戏的帮助7.杂项的帮助8.超级用户可以执行的系统命令的帮助9.内核相关的。2.使用m......
  • Mac上安装主从模式&哨兵模式Redis(5.0.9)
    1、服务节点说明Master节点ip和端口为:127.0.0.1:6380Slave节点ip和端口为:127.0.0.1:6381;127.0.0.1:6382哨兵节点说明:127.0.0.1:26380;127.0.0.1:26381;127.0.0.1:26382Redis哨兵集群拓扑图.png2、配置主从模式2.1、redis修改配置2.1.1、Master的redis.conf设置哪些IP......
  • 神州笔记本 win11 节能模式 供电不足 自动关机
    刚刚买了一个神州笔记本没几天,用着用着就出现问题了。本人使用电脑有个极为不好的习惯,那就是会一次性打开特别多的应用,然后不关,一直留着,这个习惯虽然不好但也是一直没有啥问题的,不过最近换了个新的笔记本就出现了问题。神州笔记本开启省电模式:之所以开这个模式其实并不是为......
  • 06_原型模式
    原型模式是一种创建型设计模式,它通过克隆现有对象来创建新对象,而不是通过实例化类来创建。原型模式允许我们创建具有相同属性和方法的对象集合,从而减少了对象的创建成本。在原型模式中,我们首先创建一个原始对象,然后通过克隆该对象来创建新的对象。这样,我们可以在不重新实例化类的......
  • 05_建造者模式
    建造者模式是一种创建型设计模式,旨在让你能够创建复杂对象,而无需直接在应用程序中指定其具体类型。通过建造者模式,你可以将对象的构建过程和表示分离,从而使相同的构建过程可以创建不同表示形式的对象。这种模式通常包括以下几个关键组件:产品(Product):最终要创建的复杂对象。抽......
  • Go语言实现设计模式之命令模式
    摘要:命令模式是一种常用的设计模式,它将请求封装成对象,从而使请求的发送者和接收者解耦。本文将详细介绍命令模式的概念和原理,并使用Go语言实现一个示例,以帮助读者更好地理解该设计模式的应用。引言:在软件开发中,命令模式是一种常见的设计模式,它可以帮助我们将请求的发送者和接收......
  • Pod实现机制与设计模式
    每个Pod都有一个特殊的被称为"根容器"的Pause容器(Pause容器,又叫Infrastructure容器)。Pause容器对应的镜像属于Kubernetes平台的一部分,除了Pause容器,每个Pod还包含一个或者多个紧密相关的用户业务容器。 众所周知,容器之间是通过Namespace隔离的,Pod要想解决上述应用场景,那么......
  • [STL标准库]240308练习
    标准输入输出#include<iostream>#include<bits/stdc++.h>usingnamespacestd;voidTest1(){ inti;charc;doubled;strings,s1; ios::sync_with_stdio(false);//关闭c语言流的链接 cin.tie(0);//关闭cin和cout的链接 cin>>i>>c>>d>>......