结构型模式之外观模式

概述

外观模式中,一个子系统的外部与其内部的通信通过一个统一的外观类进行,外观类将客户类与子系统的内部复杂性分隔开,使得客户类只需要与外观角色打交道,而不需要与子系统内部的很多对象打交道

定义

为子系统中的一组接口提供一个统一的入口。外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用

实现

子系统

    /// <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、 如果设计不当,增加新的子系统可能需要修改外观类的源代码,违背了开闭原则。

时间: 2024-12-24 12:31:44

结构型模式之外观模式的相关文章

结构型设计模式之外观模式

结构 意图 为子系统中的一组接口提供一个一致的界面,F a c a d e 模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 适用性 当你要为一个复杂子系统提供一个简单接口时.子系统往往因为不断演化而变得越来越复杂.大多数模式使用时都会产生更多更小的类.这使得子系统更具可重用性,也更容易对子系统进行定制,但这也给那些不需要定制子系统的用户带来一些使用上的困难.F a c a d e 可以提供一个简单的缺省视图,这一视图对大多数用户来说已经足够,而那些需要更多的可定制性的用户可以越过f

java-设计模式(结构型)-【外观模式】

1.外观模式(Facade) 最少知道原则:一个类应该尽可能少的与其他类发生相互作用,使类相对独立,系统功能模块相对独立. 定义:减少类与类之间的依赖关系,就像Spring一样,可以将类和类之间的关系配置到配置文件中. 而外观模式则是将它们类之间的关系放入一个Facade类中,降低类与类之间的耦合度,该模式没有涉及接口.  2.图解 public class Computer { //各个部件(类) private CPU cpu=new CPU(); private Memory m=new

14结构型模式之外观模式

概念  Facade模式也叫外观模式,是由GoF提出的23种设计模式中的一种.Facade模式为一组具有类似功能的类群,比如类库,子系统等等,提供一个一致的简单的界面.这个一致的简单的界面被称作facade. 角色和职责 Fa?ade 为调用方, 定义简单的调用接口. Clients 调用者.通过Facade接口调用提供某功能的内部类群. Packages 功能提供者.指提供功能的类群(模块或子系统) 适用于: 为子系统中统一一套接口,让子系统更加容易使用. 案例 //实现多个子系统的封装 #i

设计模式(7)--适配式模式与外观模式

转换接口. 引入新原则: " 最少知识"原则   作用为 外观模式 面向对象的适配器:将一个接口转换成另一个接口,以符合客户的期望. 对象适配器  与  类适配器 OO原则:(1)封装变化 (2)多用组合,少用继承 (3)针对接口编程,不针对实现编程 (4)为交互对象之间的松耦合设计而努力 (5)类应该对扩展开放,对修改关闭.(6) 依赖抽象,不要依赖具体类.(7)只和朋友交流. OO模式: 适配器模式-:将一个类的接口,转换成客户期望的另一个接口.适配器让原本接口不兼容的类可以合作无

2 结构型模式之 - 外观模式

外观模式的介绍:外观模式在开发运用中的频率非常高,尤其是现阶段各种第三方SDK充斥在我们的周边,而这些SDK很大概率会使用外观模式,通过一个外观类使得整个系统的接口只有一个统一的高层接口,这样就能够降低用户使用的复杂度,也对用户屏蔽了很多实现细节,当然 ,在我们的开发过程中,外观模式也是我们封装API的常用手段,例如网络模块,ImageLoader模块等.可能你已经在开发中运用过无数次外观模式,只是没有理论层面上认识它,本章我们就从理论与实践相结合的方式来理解外观模式 外观模式的定义: 要求一个

结构型模式之 外观模式

外观模式(Facade Pattern):外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用.外观模式又称为门面模式,它是一种对象结构型模式. 意图:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 主要解决:降低访问复杂系统的内部子系统时的复杂度,简化客户端与之的接口. 关键代码:在客户端和复杂系统之间再加一层,这一层将调用顺序.依赖

设计模式(结构型)之享元模式(Flyweight Pattern)

PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbober] 阅读前一篇<设计模式(结构型)之外观模式(Facade Pattern)>http://blog.csdn.net/yanbober/article/details/45476527 概述 当一个软件系统在运行时产生的对象数量太多,将导致运行代价过高,带来系统性能下降等问题.所以需要采用一

&quot;围观&quot;设计模式(17)--结构型之享元模式(Flyweight Pattern)

享元模式(英语:Flyweight Pattern)是一种软件设计模式.它使用共享物件,用来尽可能减少内存使用量以及分享资讯给尽可能多的相似物件:它适合用于当大量物件只是重复因而导致无法令人接受的使用大量内存.通常物件中的部分状态是可以分享.常见做法是把它们放在外部数据结构,当需要使用时再将它们传递给享元.----WIKIPEDIA 个人理解 共享,内存消耗大的时候应考虑对象的共享,共享对象可以减少对象的生成数量,这样可以减少内存的消耗,当一个对象和其他的对象存在共性且内容一致的时候,可以将共有

设计模式(结构型)之装饰者模式(Decorator Pattern)

PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbober] 阅读前一篇<设计模式(结构型)之组合模式(Composite Pattern)>http://blog.csdn.net/yanbober/article/details/45392513 概述 装饰模式可以在不改变一个对象本身功能的基础上给对象增加额外的新行为.装饰模式是一种用于替代继承