提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
参考文献:
参考文献1:https://zhuanlan.zhihu.com/p/58903776
参考文献2:http://c.biancheng.net/view/1364.html
本文是学习笔记,只用作本人学习记录使用。
提示:以下是本篇文章正文内容,下面案例可供参考
一、案例
题目:
*巴克,初步需求:容量是中杯,口味:原味、加糖;
第二次需求:容量是中杯、大杯、超大杯,口味:原味加糖;
使用桥接模式实现需求
使用语言:C#
二、逻辑分析
1.咖啡为抽象化(Abstraction)角色
2.咖啡容量为修正抽象(RefinedAbstraction)角色
3.添加剂(口味)为实现化(Implementor)角色
4.客户订单为具体实现化角色
三、具体代码
工程文件图:
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的内容,本文仅仅简单使用了桥接模式,如有不足之处,欢迎在评论中留言。