zoukankan      html  css  js  c++  java
  • 结构型---外观模式(Facade Pattern)

    定义

    外观模式提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。使用外观模式时,我们创建了一个统一的类,用来包装子系统中一个或多个复杂的类,客户端可以直接通过外观类来调用内部子系统中方法,从而外观模式让客户和子系统之间避免了紧耦合。

    外观模式代码:

     /// <summary>
        /// 子系统A
        /// </summary>
        public class ClassA
        {
            public void doSomethingA()
            {
                //业务逻辑
            }
        }
        /// <summary>
        /// 子系统B
        /// </summary>
        public class ClassB
        {
            public void doSomethingB()
            {
                //业务逻辑
            }
        }
        /// <summary>
        /// 子系统C
        /// </summary>
        public class ClassC
        {
            public void doSomethingC()
            {
                //业务逻辑
            }
        }
        /// <summary>
        /// 门面对象
        /// </summary>
        public class Facade
        {
            private ClassA a = new ClassA();
            private ClassB b = new ClassB();
            private ClassC c = new ClassC();
            //提供给外部访问的方法
            public void mothodA()
            {
                this.a.doSomethingA();
            }
            public void mothodB()
            {
                this.b.doSomethingB();
            }
            public void mothodC()
            {
                this.c.doSomethingC();
            }
        }
    View Code

    外观的优缺点

    优点:

    1. 外观模式对客户屏蔽了子系统组件,从而简化了接口,减少了客户处理的对象数目并使子系统的使用更加简单。
    2. 外观模式实现了子系统与客户之间的松耦合关系,而子系统内部的功能组件是紧耦合的。松耦合使得子系统的组件变化不会影响到它的客户。

    缺点:

    1. 如果增加新的子系统可能需要修改外观类或客户端的源代码,这样就违背了”开——闭原则“(不过这点也是不可避免)。

    使用场景

     在以下情况下可以考虑使用外观模式:

    • 外一个复杂的子系统提供一个简单的接口
    • 提供子系统的独立性
    • 在层次化结构中,可以使用外观模式定义系统中每一层的入口。其中三层架构就是这样的一个例子
  • 相关阅读:
    IntentService和AsyncTask的区别
    Android拒绝来电的实现ITelephony类的反射
    如何安全退出已调用多个Activity的Application?
    Android常用知识点总汇
    android menu的两种实现方法
    Android4.0系统接收不到广播的问题解析
    Android 面试题
    AsyncTask的用法
    select @@identity的用法
    按需操控Broadcast Receivers是否开启]
  • 原文地址:https://www.cnblogs.com/scmail81/p/8685696.html
Copyright © 2011-2022 走看看