zoukankan      html  css  js  c++  java
  • 外观/门面模式(Facade)

    2015/4/28
    外观/门面模式(Facade),为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

    
    #include <vector>
    #include <iostream>
    using namespace std; 
    class Base{
        public:
            virtual void Product()=0;
    };
    class ProductA:public Base{
        public:
            void Product()
            {
                cout<<"A"<<endl;
            }
    };
    class ProductB:public Base{
        public:
            void Product()
            {
                cout<<"B"<<endl;
            }
    };
    class ProductC:public Base{
        public:
            void Product()
            {
                cout<<"C"<<endl;
            }
    };
    template <typename T>class Facade{
        private:
            vector <T> vec;
            public:
                void Add(T t)
                {
                    vec.push_back(t);
                }
    /*可以定义多个函数实现不同的遍历顺序在此处我们是如何进入就如何输出,类似于队列*/
                void Product()
                {
               vector <T>::iterator it;//typename
                   for(it=vec.begin();it!=vec.end();it++)
                   (*it)->Product();
                }           
    };
    int main(void)
    {
        Base *pa=new ProductA();
        Base *pb=new ProductB();
        Base *pc=new ProductC();
        /*以下是外观模式核心*/
    Facade <Base *> p;
        p.Add(pa);
        p.Add(pb);
        p.Add(pc);
        p.Product();
        return 0;
    }

    何时使用外观模式(摘自大话设计模式):
    首先,在设计初期阶段,应该要有意识的将不同的两个层分离。
    其次,在开发阶段,子系统往往因为不断的重构演化而变得越来越复杂,大所属的模式使用时也都会产生很多很小的类,这本是好事,也给外部调用带来了巨大的困难,增加外观Façade可以提供一个简单的接口,减少它们之间的依赖。(可以理解成将非常复杂的各种模式打包起来,我们只需要提供借口)
    第三,在维护一个遗留的大型系统时,可能这个系统已经非常难以维护和扩展了,但因为它暴汗非常重要的功能,新的需求开发必须要依赖于他,那么可以外新系统开发一个外观类Façade,让新系统与Façade交互。

  • 相关阅读:
    java学习(十六):对象的自定义比较,Comparator和Comparable
    Java学习(十五):hashCode的作用
    MySQL存储过程入门教程
    MySQL,SQLServer,Oracle数据库常用字段类型
    Java学习(十四):JDBC方式连接数据库举例
    JavaScript对时间的操作方法
    Java学习(十二):Java中的常用时间操作
    Java学习(十一):Java锁Synchronized,对象锁和类锁举例
    Python基础学习9 类
    Python基础学习8 函数
  • 原文地址:https://www.cnblogs.com/pzqu/p/9457644.html
Copyright © 2011-2022 走看看