【设计模式】外观模式——“知道有它就行了,内容不要你懂。”

【设计模式】外观模式——“知道有它就行了,内容不要你懂。”


【前言】

最近在进行机房收费系统的重构,三层架构中加了两个设计模式——外观和抽象工厂。所以,又拿出了设计模式的书再复习一下。 再看外观模式就像一个主机的外壳——子系统内部有哪些接口你不需要知道,你客户端只要知道我外观层提供给的接口就好了。用外观模式, 就像米老师讲快速阅读时说的:“知道有它就行了,内容不要你懂。”


UML图】

 


demo实现】

外观类:

<span style="font-size:24px;">using System;
namespace System </span>
<span style="font-size:24px;">{
	public class facade 
    {
        SubSystemOne one;
        SubSystemTwo two;
        SubsystemThree three;
        SubSystemFour four;

		public facade()
        {
            one = new SubSystemOne();
            two = new SubSystemTwo();
            three = new SubsystemThree();
            four = new SubSystemFour();


		}

		~facade()
        {

		}

		public virtual void Dispose(){

		}

		public void MethodA()
        {
            Console.WriteLine("\n 方法组A()————");
            one.MethodOne();
            two .MethodTwo ();
            four.MethodFour();


		}

		public void MethodB()
        {
            Console.WriteLine("\n 方法组B()————");
            two.MethodTwo();
            three.Methodthree();
            
		}

	}//end facade

}//end namespace System</span>

<span style="font-size:24px;">namespace System {
	public class SubSystemOne {

		public SubSystemOne(){

		}

		~SubSystemOne(){

		}

		public virtual void Dispose(){

		}

		public void MethodOne(){
            Console.WriteLine("子系统方法一");

		}

	}//end SubSystemOne

}//end namespace System</span>

<span style="font-size:24px;">namespace System {
	public class SubSystemTwo {

		public SubSystemTwo(){

		}

		~SubSystemTwo(){

		}

		public virtual void Dispose(){

		}

		public void MethodTwo()
        {
            Console.WriteLine("子系统方法二");
		}

	}//end SubSystemTwo

}//end namespace System</span>


<span style="font-size:24px;">namespace System {
	public class SubsystemThree {

		public SubsystemThree(){

		}

		~SubsystemThree(){

		}

		public virtual void Dispose(){

		}

		public void Methodthree(){
            Console.WriteLine("子系统方法三");
		}

	}//end SubsystemThree

}//end namespace System</span>
<span style="font-size:24px;">namespace System 
{
	public class SubSystemFour 
    {

		public SubSystemFour(){

		}

		~SubSystemFour(){

		}

		public virtual void Dispose()
        {

		}

		public void MethodFour()
        {
            Console .WriteLine("子系统方法四");

		}

	}

}</span>
客户端代码:
<span style="font-size:24px;">namespace ConsoleApplication4
{
    class Program
    {
        static void Main(string[] args)
        {
            facade facade = new facade();
            facade.MethodA();
            facade.MethodB();
            Console.Read();

        }
    }
}
</span>




【适用情况】

      1.三层架构中

      2.子系统因为不断重构演化而变得越来越复杂,用facade减少依赖

      3.维护一个遗留的大型系统中,用facade来与新系统交互。

【优点】

   (1)实现了子系统与客户端之间的松耦合关系。

   (2)客户端屏蔽了子系统组件,减少了客户端所需处理的对象数目,并使得子系统使用起来更加容易。

【总结】

   设计模式的核心就是解耦, 就是一些解耦合的方法。

 

评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农胖虎-java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值