c#设计模式==外观模式

来源:互联网 发布:免费数据恢复app 编辑:程序博客网 时间:2024/05/21 17:52

  外观模式,是一种使用频率非常高的结构型设计模式,它通过引入一个外观角色来简化客户端与子系统之间的交互,为复杂的子系统调用提供一个统一的入口,降低子系统与客户端的耦合度,且客户端调用非常方便。

  不知道大家有没有比较过自己泡茶和去茶馆喝茶的区别,如果是自己泡茶需要自行准备茶叶、茶具和开水,如图1(A)所示,而去茶馆喝茶,最简单的方式就是跟茶馆服务员说想要一杯什么样的茶,是铁观音、碧螺春还是西湖龙井?正因为茶馆有服务员,顾客无须直接和茶叶、茶具、开水等交互,整个泡茶过程由服务员来完成,顾客只需与服务员交互即可,整个过程非常简单省事,如图1(B)所示。

1两种喝茶方式示意图

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Reflection;namespace 外观模式{    class Program    {        static void Main(string[] args)        {            Waiter waiter = new Waiter();            waiter.settea("BiLuoChun");            waiter.talboilwater();            waiter.talTeaSet();            waiter.talTeaLeaf();            waiter.settea("TieGuanYin");            waiter.talboilwater();            waiter.talTeaSet();            waiter.talTeaLeaf();            waiter.settea("XiHuLongJing");            waiter.talboilwater();            waiter.talTeaSet();            waiter.talTeaLeaf();        }    }    class Tea                               //煮茶基类    {        public void boilwater()              //煮开水        {            Console.WriteLine("煮开水");        }        public void TeaSet()                 //准备茶具        {            Console.WriteLine("准备茶具");        }        public virtual void TeaLeaf() { }        //放入不同茶叶    }    class BiLuoChun : Tea                    //碧螺春类    {        public override void TeaLeaf()        //放入碧螺春        {            Console.WriteLine("放入碧螺春,静候30分钟,请品尝");        }    }    class TieGuanYin : Tea                    //铁观音类    {        public override void TeaLeaf()         //放入铁观音        {            Console.WriteLine("放入铁观音,静候30分钟,请品尝");        }    }    class XiHuLongJing : Tea                  //西湖龙井    {        public override void TeaLeaf()        {            Console.WriteLine("放入西湖龙井,静候30分钟,请品尝");        }    }    class Waiter    {        private Tea tea;        public void settea(string teaname)                     //选定茶的品种        {            tea = (Tea)Assembly.Load("外观模式").CreateInstance("外观模式."+teaname);    //反射        }        public void talboilwater()                             //煮开水        {            tea.boilwater();        }        public void talTeaSet()                                //准备茶具        {            tea.TeaSet();        }        public void talTeaLeaf()                               //放入茶叶        {            tea.TeaLeaf();        }    }}
原创粉丝点击