深入理解设计模式(24):外观模式
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
深⼊理解设计模式(24):外观模式
⼀、什么是外观模式
定义:为⼦系统中的⼀组接⼝提供⼀个⼀致的界⾯,⽤来访问⼦系统中的⼀群接⼝。
外观模式组成:
Facade:负责⼦系统的的封装调⽤
Subsystem Classes:具体的⼦系统,实现由外观模式Facade对象来调⽤的具体任务
⼆、外观模式的使⽤场景
1、设计初期阶段,应该有意识的将不同层分离,层与层之间建⽴外观模式;
2、开发阶段,⼦系统越来越复杂,增加外观模式提供⼀个简单的调⽤接⼝;
3、维护⼀个⼤型遗留系统的时候,可能这个系统已经⾮常难以维护和扩展,但⼜包含⾮常重要的功能,为其开发⼀个外观类,以便新系统与其交互。
三、外观模式的优缺点
优点:
1、实现了⼦系统与客户端之间的松耦合关系;
2、客户端屏蔽了⼦系统组件,减少了客户端所需处理的对象数⽬,并使得⼦系统使⽤起来更加容易。
缺点:
1、不符合开闭原则,如果要修改某⼀个⼦系统的功能,通常外观类也要⼀起修改;
2、没有办法直接阻⽌外部不通过外观类访问⼦系统的功能,因为⼦系统类中的功能必须是公开的(根据需要决定是否使⽤internal访问级别可解决这个缺点,但外观类需要和⼦系统类在同⼀个程序集内)。
四、外观模式的实现
先写出四个⼦系统的类
class SubSystemOne
{
public void MethodOne()
{
Console.WriteLine("⼦系统⽅法⼀");
}
}
class SubSystemTwo
{
public void MethodTwo()
{
Console.WriteLine("⼦系统⽅法⼆");
}
}
class SubSystemThree
{
public void MethodThree()
{
Console.WriteLine("⼦系统⽅法三");
}
}
class SubSystemFour
{
public void MethodFour()
{
Console.WriteLine("⼦系统犯法四");
}
}
引⼊外观类,减少⼦系统类之间的交互class Facade
{
SubSystemOne one;
SubSystemTwo two;
SubSystemThree three;
SubSystemFour four;
public Facade()
{
one = new SubSystemOne();
two = new SubSystemTwo();
three = new SubSystemThree();
four = new SubSystemFour();
}
public void MethodA()
{
Console.WriteLine("\n⽅法组合A()---");
one.MethodOne();
two.MethodTwo();
four.MethodFour();
}
public void MethodB()
{
Console.WriteLine("\n⽅法组B()---");
two.MethodTwo();
three.MethodThree();
}
}
客户端代码:
static void Main(string[] args)
{
Facade facade = new Facade();
facade.MethodA();
facade.MethodB();
Console.Read();
}。