zoukankan      html  css  js  c++  java
  • 设计模式学习一:组件协作

    从封装角度对设计模式分类,

    一:组件协作

    组件协作模式通过晚绑定来实现框架与应用程序的松耦合,很好的应对变化
    1:模板方法(Template Method)

    //没有采用设计模式的类设计:
    (1):
    //程序库开发人员写的
    class Library
    {
    public:
            void step1()
            {
                 //...
            }
            void step3()
            {
                //...
            }
            
            void step5()
            {
                //...
            }
    };
    (2):
    //应用程序开发人员写的
    class Application
    {
    public:
            void step2()
            {
                //...
            }
            void step4()
            {
                //...
            }
    };
    int main()
    {
        Application app();
        Library lib();
        
        lib.step1();
        
        if(app.step2())
        {
            lib.step3();
        }
        for(int i = 0; i < 4; i++)
        {
            app.step4();
        }
        lib.step5();
        
    }

    (1)是先前早写好的,(2)是后来开发人员写的。它俩之间的关系是(2)调用(1),属于早绑定。

    //采用设计模式的类设计:
    (1):
    //程序库开发人员写的
    class Library
    {
    public:
        void Run()
        {
            lib.step1();
        
            if(app.step2()) //支持变化--->虚函数的多态调用
            {
                lib.step3();
            }
            for(int i = 0; i < 4; i++)
            {
                app.step4();//支持变化--->虚函数的多态调用
            }
            lib.step5();
        }
        //基类的析构函数成虚函数,以防子类析构函数无法被调用
        virtual ~Library() { }
    protected:
        step1()
        {
            //...稳定
        }
        step3()
        {
            //...稳定
        }
        step5()
        {
            //....稳定
        }
    };
    //纯虚函数,实现由子类来完成,支持子类的变化
    virtual bool step2() = 0;
    virtual void step4() = 0;
    (2):
    //应用程序开发人员写的
    class Application
    {
    protected:
        bool step2()
        {
            //....重写虚函数
        }
        void step4()
        {
            //...重写虚函数
        }
    };
    int main()
    {
        //多态指针,声明类型为Library,实际类型为Application
        Library *lib = new Application();
        lib.Run();
        
        delete lib;
    }

    (1)调用(2),属于晚绑定。

  • 相关阅读:
    PG-日常管理
    PG-高可用(pgpool-Ⅱ)
    PG-基准测试
    PG-备份恢复
    PG-并发问题
    Go-常量
    Go-变量
    Oracle-11g升级PSU补丁
    Oracle-`sqlplus`工具使用技巧
    [CF1051F] The Shortest Statement
  • 原文地址:https://www.cnblogs.com/strivingforever/p/8622294.html
Copyright © 2011-2022 走看看