说说设计模式~门面模式(Facade)
门面模式(Facade)属于结构型模式的一种,它符合面向对象的封装原则,但又不符合开闭原则,呵呵,今天我们主要说它的优点,不谈缺点.
定义
门面模式,是指提供一个统一的接口去访问多个子系统的多个不同的接口,它为子系统中的一组接口提供一个统一的高层接口。使用子系统更容易使用。
技巧
我们在设计子类时,由于外部通过门面去访问它的功能,所以一般子类都会被声明为internal.
何时能用到它?
1、客户只需要使用某个复杂系统的子集,或者需要以一种特殊的方式与系统交互时,使用门面模式。
2、当需要跟踪原系统的使用情况时 ,使用门面模面模式。因为所有对系统的访问都经过FACADE,所以可以很容易地监视系统的使用 。
3、希望封装和隐藏原系统时。
4、编写新类的成本小于所有人使用和维护原系统使用所需的成本时
观察者模式的结构图
观察者模式实现说明
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 FacadeFactory().Action();
结果截图
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
2013-09-03 随心所欲~我也做个集合遍历器吧(自己的foreach,委托的威力)
2012-09-03 Func和Action委托在代码中的写法