面与卤的鹊桥相会——桥接模式
模式 桥接
2023-09-27 14:29:22 时间
本文来自:崔成龙博客专栏。转载请注明出处:http://blog.csdn.net/xiaoxian8023
软考上午题终于考完了。三个赶考者都感觉不错。检查了2遍,提前30分钟都出来了 。
小A,小B,小C楼下碰头,相视一笑,轻松之感溢于言表。遂决定去吃面,以犒劳自己的肚子。
“老板,我要西红柿鸡蛋面!”,“尖椒炸酱面!”,“苏格兰打卤面!”。。。。。。“好嘞!”
面快出锅了,“哎哎,老板,怎么我的面跟他的面一样啊,就是换了一下卤?”往面里放卤的服务员翻了小B一眼,不搭理。旁边那个年长点的师傅笑了笑,说道“小兄弟儿,这你就不懂了吧。其实面都是一样的,只是换一下卤罢了。”“哦哦,原来如此啊。”小B灰溜溜得端起面来跑开了。。。
面毕,小B实在是咽不下这口气。就想在小C那儿“捞回点儿本来”。
“小C,面吃的怎么样啊?”小B阴阳怪气的问道。
小C看着小B的表情,觉得有点不对劲,自己是不是又要上当了,但是又想不出来自己哪留有什么“把柄”,然后就答道,
“还,还行吧,问这干嘛??”
“嘿,你怕什么呀。我考一个关于吃面的题目”
“嗨,我还以为什么呢,随便考吧,哥是来者不拒。”小C心里想到,就你那智商,能出什么样的难题呢,等着被鄙视吧。
“你感觉自家煮面和饭馆煮面有什么不同?”
“这还用问!感觉不同呗。自己煮面,自己累死了还得做饭,又是炒卤,又是煮面的,最低也得折腾半小时吧。饭馆多好啊,只要吆喝一声,人家都给你做好,端到你面前了。而且速度超快的。连这个都不知道。也对,就你那智商,好吧,我原谅你,哈哈哈哈”
“哼,别笑得太早了。同样是面?你说为什么感觉不同啊”
“呃,这个嘛,嗯,让我想想”小C装傻了。。。
“哈,有点意思哎。我给你说说看看对不。”小A憋不住了。接着说道,
“刚才小C说了,自家煮面,你必须自己做卤,自己煮面。每次想吃面的时候,这两步都是少不了的。但是面馆不一样啊。饭馆卤都是提前做好的。你点了面后,面馆给你煮面,然后加上你要的卤不就OK了吗!而且速度超快。比自己做饭省事多了。”
“哦~,原来如此。”
“我说那会那个服务员像看白痴的一样看我呀。”小B嘀咕道
“what,what!!原来你被吃瘪了啊,哈哈”小C得意得捧腹大笑。
小A眼睛一转,对即将要发飙的小B说道,
“既然是你提出来的,你说说饭馆为什么要这么做呢?”
“呃,嗯,,,,我想,应该是为了更快捷,方便地方便用户,同时提高自己的效率吧。”
“还有没有别的?”
小B想了半天,摇来摇头,“想不到了”
“提示一点,面馆在增加新类型面的时候,是怎么做的?”
“哦~~,我知道了,因为面差不多是一样的,只需要准备卤就行了。”
“嗯,对的。其实面也是有不同的。比如说宽面,拉面,圆面。这样一组合,新的类型的面就出炉了。”
“原来面馆里也有这么大学问啊。”
“那是当然。365行,行行出状元啊。先不说这个了,既然说道这个面了,那你用面向对象写写刚才我们讨论的这件事儿吧。”
“好。我试试吧”小B自信道。
既然是面向对象,那么先把类找出来吧。首先有原料(Material),下分为面(Noodles)和卤(Halogen)。面有宽面条(WideNoodles),窄面条(NarrowNoodles)等多种类型,卤菜有西红柿鸡蛋卤(TomatoAndEgg),茄子豆瓣酱(AubergineBeanPaste)等多种卤菜。 西红柿鸡蛋面类(TomatoEggNoodles)为西红柿鸡蛋卤和宽面构成,而苏格兰打卤面(ScotlandNoodles)则是有茄子
豆瓣酱和窄面构成的。
先画出UML图:
uml图1.0版
龙轩8023 熟悉javaee开发,有多年支付领域的开发经验。关注开源~ httpclientUtil开源项目创建者。https://github.com/Arronlong
面条类及子类
#region 面条类及子类 /// summary /// 面条类 /// /summary public abstract class Noodles public Noodles() /// summary /// 获取面类型名称 /// /summary /// returns /returns public abstract string GetName(); /// summary /// 窄面条 /// /summary public class NarrowNoodles:Noodles public NarrowNoodles() public override string GetName() return "窄面条"; /// summary /// 宽面条 /// /summary public class WideNoodles : Noodles public WideNoodles() public override string GetName() return "宽面条"; #endregion
卤菜类及子类
#region 卤菜类及子类 /// summary /// 卤菜类 /// /summary public abstract class Halogen public Halogen() /// summary /// 获取卤菜名称 /// /summary /// returns /returns public abstract string GetName(); /// summary /// 西红柿鸡蛋卤 /// /summary public class TomatoAndEgg : Halogen public TomatoAndEgg() public override string GetName() return "西红柿鸡蛋卤"; /// summary /// 茄子豆瓣酱 /// /summary public class AubergineBeanPaste:Halogen public AubergineBeanPaste() public override string GetName() return "茄子豆瓣酱";
Console.WriteLine("我是"+name+",由"+noodles.GetName () +"和"+halogen.GetName ()+"组成");
public TomatoEggNoodles(string name, Noodles noodles, Halogen halogen) : base(name, noodles, halogen) /// summary /// 苏格兰打卤面 /// /summary public class ScotlandNoodles : NoodlesAndHalogen public ScotlandNoodles(string name, Noodles noodles, Halogen halogen) : base(name, noodles,halogen) #endregion
客户端代码:
static void Main(string[] args) NoodlesAndHalogen n1=new TomatoEggNoodles("西红柿鸡蛋面(宽面)",new WideNoodles(),new TomatoAndEgg() ); n1.GetName(); NoodlesAndHalogen n2 = new ScotlandNoodles("苏格兰打卤面(窄面)", new NarrowNoodles(), new AubergineBeanPaste()); n2.GetName(); Console.Read(); }
运行结果:
龙轩8023 熟悉javaee开发,有多年支付领域的开发经验。关注开源~ httpclientUtil开源项目创建者。https://github.com/Arronlong
相关文章
- Go 1.18 新特性:多模块工作区模式
- 桥接模式 (学习笔记9)
- 桥接模式
- 桥接(Bridge)模式
- JAVA设计模式之【桥接模式】
- STM32单片机引脚要职能配置为输入或者输出模式,并不能像51一样准双向,那么如何进行但总线通讯呢?STM32F103C8驱动HTD11示例
- 14桥接模式Bridge
- Singleton模式
- 电商平台促销管理功能解析,数商云S2B2C商城系统开启日化行业数字零售新模式
- 设计模式-桥接模式
- 工厂模式
- java设计模式之桥接模式
- C# 只读模式读取txt文件内容
- Activity的4中加载模式
- PHP设计模式——迭代器模式
- CentOS7安装教程 (图文超详细 - 桥接模式 - 固定IP - 直接联网)
- 大战设计模式(第二季)【7】———— 从源码看桥接模式
- 【设计模式 - 结构型模式】2. 桥接模式
- 设计模式:桥接模式(Bridge)
- [Unity 设计模式]桥接模式(BridgePattern)
- 职责链模式之真假美猴王
- 桥接模式之牛郎织女幸福牵手