标签:
概述
外观模式中,一个子系统的外部与其内部的通信通过一个统一的外观类进行,外观类将客户类与子系统的内部复杂性分隔开,使得客户类只需要与外观角色打交道,而不需要与子系统内部的很多对象打交道
定义
为子系统中的一组接口提供一个统一的入口。外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用
实现
子系统
/// <summary> /// 注册账号类 /// </summary> public class RegistAccount { /// <summary> /// 注册方法 /// </summary> public void Register() { Console.WriteLine("账号注册成功..."); } }
/// <summary> /// 购物类 /// </summary> public class Shopping { public void Shop() { Console.WriteLine("已选购商品..."); } }
/// <summary> /// 付款类 /// </summary> public class Pay { public void PayMoney() { Console.WriteLine("付款成功..."); } }
外观类
/// <summary> /// 外观类 /// </summary> public class ShoppingFacade { private Pay pay; private Shopping shopping; private RegistAccount regist; public ShoppingFacade(RegistAccount regist, Shopping shopping, Pay pay) { this.pay = pay; this.shopping = shopping; this.regist = regist; } public void Buy() { regist.Register(); shopping.Shop(); pay.PayMoney(); } }
客户端
class Program { static void Main(string[] args) { var regist = new RegistAccount(); var shopping = new Shopping(); var pay = new Pay(); //通过外观类提供对外的访问接口,简化客户端访问方式 ShoppingFacade fac = new ShoppingFacade(regist, shopping, pay); fac.Buy(); Console.ReadLine(); } }
总结
优点
1、它对客户端屏蔽了子系统组件,减少了客户端所需处理的对象数目,并使得子系统使用起来更加容易。通过引入外观模式,客户端代码将变得很简单,与之关联的对象也很少。
2、它实现了子系统与客户端之间的松耦合关系,这使得子系统的变化不会影响到调用它的客户端,只需要调整外观类即可。
3、一个子系统的修改对其他子系统没有任何影响,而且子系统内部变化也不会影响到外观对象。
缺点
1、不能很好地限制客户端直接使用子系统类,如果对客户端访问子系统类做太多的限制则减少了可变性和灵活性。
2、 如果设计不当,增加新的子系统可能需要修改外观类的源代码,违背了开闭原则。
标签:
原文地址:http://www.cnblogs.com/Jabben/p/5571717.html