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

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

  不知道大家有没有比较过自己泡茶和去茶馆喝茶的区别,如果是自己泡茶需要自行准备茶叶、茶具和开水,如图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();
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值