zoukankan      html  css  js  c++  java
  • Abstract Factory模式

    image

    int main()

    {

         CustomDialog* pDialog = new CustomDialog(new WindowsWidgetFactory());

         pDialog->ShowDialog();

     

         CustomDialog* pMacDialog = new CustomDialog(new MacWidgetFactory());

         pMacDialog->ShowDialog();

    }

     

    public CustomDialog
    {
    public:
        CustomDialog(IWidgetFactory* pFactory)
        {
            this->SetWidgetFactory(pFactory);
        }
        void SetWidgetFactory(IWidgetFactory* pFactory)
        {
            this->SetButton(pFactory->GetButton());
            this->SetTextField(pFactory->GetTextField());
        }
        void SetButton(IButton* pButton)
        {
            m_pButton = pButton;
        }
        void SetTextField(ITextField* pText)
        {
            m_pTextField = pText;
        }
        ...

        void ShowDialog(){}
    private:
        IButton*  m_pButton;
        ITextField* m_pTextField;
    }

    image

    在Abstract Factory模式中将具体的Product封装在具体Factory实现中,而客户仍只要面对Factory与Product的抽象介面,避免依赖于具体的Factory与Product,由于Factory封装了所必须的Product,所以要更换掉所有的元件,只要简单的抽换掉Factory就可以了,不用修改客户端的程式。

  • 相关阅读:
    微软程序员最好的时代来了
    领域驱动设计系列 (六):CQRS
    当我谈 "加班有罪" 我在谈什么?
    parquet 简介(转)
    Spark动态资源分配-Dynamic Resource Allocation
    Spark配置参数详解
    PhpStorm使用sftp实现代码自动上传服务器
    docker 命令大全
    mysql 5.6配置
    docker volume
  • 原文地址:https://www.cnblogs.com/tuzhiye/p/1792521.html
Copyright © 2011-2022 走看看