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

桥接模式

时间:2023-05-30 09:46:09浏览次数:26  
标签:sku string get 桥接 brand 模式 Price public

一、定义

桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立地变化。

UML类图

Abstraction:抽象化角色,并保存一个对实现化对象的引用。
RefinedAbstraction:修正抽象化角色,改变和修正父类对抽象化的定义。
Implementor:实现化角色,这个角色给出实现化角色的接口,但不给出具体的实现。
ConcreteImplementor:具体实现化角色,这个角色给出实现化角色接口的具体实现。

二、示例

需求:还是以奶茶店为例,奶茶有很多品牌,如,一点点,COCO,喜茶等,奶茶的规格又分为大杯、中杯、小杯等,不同品牌价格不同,不同规格价格也不同(不考虑太复杂的情况,就假设每种品牌和规格都有一个价格基数,总价直接累加)。

 代码

1.Drink.cs

public abstract class Drink
    {
        private readonly BrandBase _brand;
        private readonly SkuBase _sku;
public Drink(BrandBase brand, SkuBase sku) { this._brand = brand; this._sku = sku; } public string Name { get; set; } public int Price { get; set; } public string Desc { get { return this.Name + this._brand.BrandName + this._sku.SkuType; } } public int Cost { get { return this.Price + this._brand.Price + this._sku.Price; } } }

2.Kafei.cs

 public class Kafei : Drink
    {
        public Kafei(BrandBase brand, SkuBase sku) : base(brand, sku)
        {
            Name = "咖啡";
            Price = 12;
        }
    }

3.BrandBase.cs

 public abstract class BrandBase
    {
        public abstract string BrandName { get; }

        public abstract int Price { get; }
    }

4.Xicha.cs

public class Xicha : BrandBase
    {
        public override string BrandName => "[喜茶]";

        public override int Price => 3;
    }

5.SkuBase.cs

public abstract class SkuBase
    {
        public abstract string SkuType { get; }

        public abstract int Price { get; }
    }

6.Dabei.cs

public class Dabei : SkuBase
    {
        public override string SkuType => "大杯";

        public override int Price => 3;
    }

7.Program.cs

internal class Program
    {
        static void Main(string[] args)
        {
            BrandBase brand = new Xicha();
            SkuBase sku = new Dabei();
            Drink drink = new Kafei(brand, sku);

            Console.WriteLine($"描述:{drink.Desc},价格:{drink.Cost}");
        }
    }

运行结果:

 

 三、优缺点

 1.优点
       分离抽象部分与它的实现部分。
       相对于继承有更少的子类,使用更灵活,也更易扩展,可多个维度自由扩展。
 2.缺点
       增加系统的理解与设计难度。
       独立变化的维度的识别比较困难。
       客户端使用成本较高。

 

四、跟装饰器模式的区别

      装饰器模式是为了动态地给一个对象增加功能,而桥接模式是为了让类在多个维度上自由扩展。
      装饰器模式的装饰者和被装饰者需要继承自同一父类,而桥接模式通常不需要。
      装饰器模式通常可以嵌套使用,而桥接模式不能。

 

标签:sku,string,get,桥接,brand,模式,Price,public
From: https://www.cnblogs.com/xiao-wo-niu/p/17442361.html

相关文章

  • RabbitMQ 工作模式介绍
    RabbitMQ工作模式介绍1.HelloWorldRabbitMQ是一个消息代理:它接受并转发消息。您可以将其视为邮局:当您将要邮寄的邮件放入邮箱时,您可以确定信使最终会将邮件交付给您的收件人。在这个类比中,RabbitMQ是一个邮政信箱,一个邮局和一个信件载体。RabbitMQ和邮局之间的主要区别在于......
  • 工厂模式和抽象工厂模式区别
    1、工厂模式定义产品接口即可,工厂中生产得是产品对象2、抽象工厂模式需要定义产品接口,工厂抽象类。工厂生产得是具体工厂对象。3、工厂为啥使用抽象类而不使用接口:接口可以实现多个,而继承是单继承。例如:常见工厂,小米,华为,长城,他们都是一个整体,但是不可能出现一个小米华为长城的......
  • SourceMap-开发模式下如何配置SourceMap
    什么是SourceMapSourceMap就是一个信息文件,里面储存着位置信息。也就是说,SourceMap文件中存储着压缩混淆后的代码,所对应的转换前的位置。有了它,出错的时候,除错工具将直接显示原始代码,而不是转换后的代码,能够极大的方便后期的调试。解决默认SourceMap的问题开发环境下,推荐......
  • 无货源模式的优势有哪些
     无货源模式的优势有哪些? 1、从整个网络收集全网商品进行多店铺货。(不需要货源和供应商,不用进货。卖别人的好产品,有成交就去原来的店铺下单。) 2、做中间商而不是卖家,赚差价。(别家店铺卖50元,设置10元佣金,你上传到自家店铺,卖60元,赚10元,又额外赚淘宝客佣金10元,一共赚了20......
  • EBS: FORM窗体开发使用VIEW模式开发,plsql DEVELOPER 自动生成PLSQL脚本
    FORM窗体开发使用VIEW模式开发,plsqlDEVELOPER自动生成PLSQL脚本,CREATEORREPLACEPACKAGEAPPS.HAND_PLSQL_AUTOCREATEAUTHIDCURRENT_USERAS/*$Header:HDPLSATC.pls115.12004/09/0215:33:09pkmship$*/PROCEDUREregist_table(p_table_nameINVARCHAR2,......
  • Factory Method Pattern 工厂方法模式简介与 C# 示例【创建型】【设计模式来了】
    〇、简介1、什么是工厂方法模式?一句话解释:  实体类和工厂类均为单独实现,不影响已实现的类,方便扩展。工厂方法模式(FactoryMethodPattern)是一种创建型模式,它允许客户端通过工厂方法来创建对象,而不是直接使用构造函数。这样可以让客户端代码更加灵活,同时保持实现的独立性。工......
  • 什么是数据库的外模式和模式映像?
    在数据库设计中,外模式/模式映像(ExternalSchema/ConceptualSchemaMapping)是指将外部模式与概念模式之间的映射关系。外部模式是指用户或应用程序对数据库的特定视图或子集的定义,而概念模式是指数据库的整体逻辑结构和组织方式。外模式/模式映像的作用是将外部模式与概念模式解耦......
  • 装饰器模式
    一、定义装饰器模式动态地给一个对象增加一些额外的职责。就增加功能而言,装饰器模式比生成子类更为灵活。二、UML类图三、示例需求:假设开一个奶茶店,奶茶种类繁多,如红豆奶茶,布丁奶茶,珍珠奶茶,红豆珍珠奶茶等,并根据不同配料计算价格,并且根据每个客户的要求,每种奶茶又可以加糖或......
  • 聊聊分布式解决方案Saga模式
    Saga模式Saga模式使用一系列本地事务来提供事务管理,而一个本地事务对应一个Saga参与者,在Saga流程里面每一个本地事务只操作本地数据库,然后通过消息或事件来触发下一个本地事务,如果其中一个本地事务失败了,Saga就会执行一系列补偿事务来实现回滚操作。(补偿事务简单来讲就是对之前本......
  • 责任链模式
    将一堆“事情”串联在一起,有序执行,就叫责任链一、概述责任链模式(ChainofResponsibilityPattern)是将链中每一个节点看作是一个对象,每个节点处理的请求均不同,且内部自动维护一个下一节点对象。当一个请求从链式的首端发出时,会沿着链的路径依次传递给每一个节点对象,直至有对象......