【设计模式练习】桥接模式——练习1

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、案例
  • 二、逻辑分析
    • 1.咖啡为抽象化(Abstraction)角色
    • 2.咖啡容量为修正抽象(RefinedAbstraction)角色
    • 3.添加剂(口味)为实现化(Implementor)角色
    • 4.客户订单为具体实现化角色
  • 三、具体代码
    • 1.咖啡-抽象化(Abstraction)角色如下:
    • 2.咖啡容量为修正抽象角色
    • 3.添加剂(口味)为实现化(Implementor)角色
    • 4.客户订单为具体实现化角色(具体调用)
  • 实验结果
  • 总结


前言

参考文献:
参考文献1:https://zhuanlan.zhihu.com/p/58903776
参考文献2:http://c.biancheng.net/view/1364.html

本文是学习笔记,只用作本人学习记录使用。


提示:以下是本篇文章正文内容,下面案例可供参考

一、案例

题目:
*巴克,初步需求:容量是中杯,口味:原味、加糖;
第二次需求:容量是中杯、大杯、超大杯,口味:原味加糖;
使用桥接模式实现需求

使用语言:C#

二、逻辑分析

1.咖啡为抽象化(Abstraction)角色

2.咖啡容量为修正抽象(RefinedAbstraction)角色

3.添加剂(口味)为实现化(Implementor)角色

4.客户订单为具体实现化角色

三、具体代码

工程文件图:
【设计模式练习】桥接模式——练习1_第1张图片

1.咖啡-抽象化(Abstraction)角色如下:

文件名Abstraction.cs

//Abstraction抽象化
    public abstract class Coffee
    {
        protected ICoffeeAdditives additives;
        public Coffee(ICoffeeAdditives additives)
        {
            this.additives = additives;
        }
        public abstract void orderCoffee(int count);
        //public abstract void checkQuality();
    }

2.咖啡容量为修正抽象角色

RefinedAbstraction.cs代码如下:

//RefinedAbstraction修正抽象类-
    public class BigCoffee :Coffee
    {
        public BigCoffee(ICoffeeAdditives additives) :base(additives)
        {
            this.additives = additives;
            Console.WriteLine("继承咖啡类-大杯"); 
        }

        public override void orderCoffee(int count)
        {
            Console.WriteLine("{0}个大杯", count);
            additives.AddSomething();
        }
    }

还有:MiddleCoffee和OverlargeCoffee类,但因实现方法相同,故省略


3.添加剂(口味)为实现化(Implementor)角色

代码如下(示例):

//实现化部分Implementor-interface
    public interface ICoffeeAdditives
    {
        void AddSomething();
    }
    
    public class Milk : ICoffeeAdditives
    {
        public void AddSomething()
        {
            Console.WriteLine("加奶");
        }
    }

    public class Sugar : ICoffeeAdditives
    {
        public void AddSomething()
        {
            Console.WriteLine("加糖");
        }
    }

4.客户订单为具体实现化角色(具体调用)

代码如下(示例):

Console.WriteLine("Hello, World!");
BigCoffee bigCoffee = new BigCoffee(new Milk());
bigCoffee.orderCoffee(2);
Console.WriteLine("Hello, World!");

实验结果

【设计模式练习】桥接模式——练习1_第2张图片

总结

例如:以上就是练习题1的内容,本文仅仅简单使用了桥接模式,如有不足之处,欢迎在评论中留言。

你可能感兴趣的:(读书笔记,设计模式,桥接模式,c#)