zoukankan      html  css  js  c++  java
  • 说说设计模式~门面模式(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();

    结果截图

    返回目录

  • 相关阅读:
    HihoCoder1105 题外话·堆(基础二叉搜索树)
    HihoCoder1080 更为复杂的买卖房屋姿势(线段树+多重lazy)
    HihoCoder1078线段树的区间修改(线段树+lazy)
    HihoCoder1070 区间最小值(简单线段树)
    HDU3577Fast Arrangement(线段树+lazy)
    POJ2985 The k-th Largest Group (并查集+treap)
    HihoCoder1337 动态第k大(treap)
    STL的erase函数和lower_bound
    HihoCoder1329 平衡树·Splay(附STL版)
    etcd 在超大规模数据场景下的性能优化
  • 原文地址:https://www.cnblogs.com/lori/p/3953879.html
Copyright © 2011-2022 走看看