[置顶] 【设计模式】——外观模式

         前一段时间写过关于机房重构的七层架构,里面包含一个外观层,机房重构也敲了好长时间了,却始终不太清楚,这个外观模式到底有什么作用?大家都敲过机房收费系统,知道在这个系统中一般都只涉及到一个表,结构相对来说比较简单,所以这样给我自己的一个困惑,就是用不用外观模式貌似没有什么区别。那么在七层架构中为什么还要有外观设计模式的存在?

    其实在这个问题的前提,是我还不能清楚的解释外观模式是怎样的一个设计模式,产生的背景,定义,运用的好处,以及缺点吧。不总结一下,永远不知道掌握多少,尝试总结一下。

首先一张图反映一个混乱的系统,阐述外观产生背景

                 [置顶] 【设计模式】——外观模式_第1张图片

正是因为系统的混乱,不利于后期的维护,所以有了外观模式。加入外观模式之后的系统。

     [置顶] 【设计模式】——外观模式_第2张图片

是不是瞬间清晰很多,所以尝试着使用设计模式,它会帮助我们更好的工作。

定义

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

下面用一个程序说明问题

 

class SubSystemA  
{  
    public void MethodA()  
    {  
        //业务实现代码  
    }  
}  
  
class SubSystemB  
{  
    public void MethodB()  
    {  
        //业务实现代码  
     }  
}  
  
class SubSystemC  
{  
    public void MethodC()  
    {  
        //业务实现代码  
    }  
}  
使用外观模式,代码编写如下

class Facade  
{  
    private SubSystemA obj1 = new SubSystemA();  
    private SubSystemB obj2 = new SubSystemB();  
    private SubSystemC obj3 = new SubSystemC();  
  
    public void Method()  
    {  
        obj1.MethodA();  
        obj2.MethodB();  
        obj3.MethodC();  
    }  
}  
class Program  
{  
    static void Main(string[] args)  
    {  
        Facade facade = new Facade();  
        facade.Method();  
    }  
}  

再来看看不用外观模式的

    class Program
    {
        static void Main(string[] args)
        {
            SubSystemA  a1=new SubSystemA ();
            SubSystemB  b1=new SubSystemB ();
            SubSystemC  c1 = new SubSystemC();

            a1.MethodA();
            b1.MethodB();
            c1.MethodC();

            Console.Read();
        }
    }
这是连接子系统较少,想象一下如果我们连接数十个子系统,这还指不定是怎样一锅乱粥了。。 所以用户在面对程序的时候,只需要一个按钮就可以完成所有的事情,这样方便程序有谁能不喜欢使用!

看完了图和代码,具体总结一下,外观模式到底有什么好处!

优点

 1、引入外观模式,是客户对子系统的使用变得简单了,减少了与子系统的关联对象,实现了子系统与客户之间的松耦合关系。
 2、只是提供了一个访问子系统的统一入口,并不影响用户直接使用子系统类。
 3、降低了大型软件系统中的编译依赖性,并简化了系统在不同平台之间的移植过程。

事物都有两面性,所以外观模式同样,如果乱用,也会给我们带来很大的困扰。说说设计模式的缺点吧。

缺点

  1、不能很好地限制客户使用子系统类,如果对客户访问子系统类做太多的限制则减少了可变性和灵活性
   2、在不引入抽象外观类的情况下,增加新的子系统可能需要修改外观类或客户端的源代码,违背了“开闭原则”

使用情景

 1、当要为一个复杂子系统提供一个简单接口时可以使用外观模式。
 2、客户程序与多个子系统之间存在很大的依赖性。引入外观类将子系统与客户以及其他子系统解耦,可以提高子系统的独立性和可移植性。

【总结】

    外观模式的主要目的就是为程序做到解耦合,减少程序与仔细与子系统之间存在的很大的依赖性。如果需要实现一个外观模式,需要将子系统组合进外观中,然后将工作委托给外观执行。最大的缺点就是违背了开放封闭原则。

   如有理解偏颇之处,还请各位大神斧正,不胜感激!

你可能感兴趣的:([置顶] 【设计模式】——外观模式)