0
点赞
收藏
分享

微信扫一扫

说说设计模式~门面模式(Facade)

门面模式(Facade)属于结构型模式的一种,它符合面向对象的封装原则,但又不符合开闭原则,呵呵,今天我们主要说它的优点,不谈缺点.

定义

门面模式,是指提供一个统一的接口去访问多个子系统的多个不同的接口,它为子系统中的一组接口提供一个统一的高层接口。使用子系统更容易使用。

技巧

我们在设计子类时,由于外部通过门面去访问它的功能,所以一般子类都会被声明为internal.

何时能用到它?

1、客户只需要使用某个复杂系统的子集,或者需要以一种特殊的方式与系统交互时,使用门面模式。

2、当需要跟踪原系统的使用情况时 ,使用门面模面模式。因为所有对系统的访问都经过FACADE,所以可以很容易地监视系统的使用 。

3、希望封装和隐藏原系统时。

4、编写新类的成本小于所有人使用和维护原系统使用所需的成本时

观察者模式的结构图

说说设计模式~门面模式(Facade)_子类

观察者模式实现说明

FacadeFactory:门面对象,对外公开,将子系统进行组合,或者将子系统进行条件的筛选等等

Sub1:子系统1,它实现了IFacade接口

Sub2:子类型2,它实现了IFacade接口

IFacade:统一接口,可有可无,子类型去实现它,有时在门面类里需要通过接口来访问子系统时,需要这个接口

观察者模式的C#实现

#region 门面
public interface IFacade
{
void Implement();
}
public class FacadeFactory
{
int _subtype;
public FacadeFactory()
: this(1)
{

}
public FacadeFactory(int subType)
{
_subtype = subType;
}
public void Action()
{
//情况1,子类型的组合
new Sub1().Implement();
new Sub2().Implement();

//情况2,子类型的选择
switch (_subtype)
{
case 1:
new Sub1().Implement();
break;
case 2:
new Sub2().Implement();
break;
default:
throw new ArgumentException("子系统参数有误");
}
}
}
internal class Sub1 : IFacade
{

public void Implement()
{
Console.WriteLine("这是子系统1");
}
}
internal class Sub2 : IFacade
{

public void Implement()
{
Console.WriteLine("这是子系统2");
}
}
#endregion

调用代码

new

结果截图

说说设计模式~门面模式(Facade)_子类_02

作者:仓储大叔,张占岭,
荣誉:微软MVP


举报

相关推荐

0 条评论