zoukankan      html  css  js  c++  java
  • 设计模式学习每日一记(4.抽象工厂)

    抽象工厂模式

    A.定义:

    提供一个创建一系列相关或相互依赖的对象的接口,而无需指定他们具体的类.

    B.定义分析:

    "提供创建一系列相关或相互依赖的对象的接口,而无需指定他们具体的类."类似简单工厂和工厂方法,要定义一个类,提供接口,但是是多个.

    "提供创建一系列相关或相互依赖的对象的接口,而无需指定他们具体的类."这个接口象简单工厂的接口一样,创建对象,但是有个约束:这些对象是相关的或者相互依赖的;

    "提供创建一系列相关或相互依赖的对象的接口而无需指定他们具体的类."这句话的意思可能是:因为抽象工厂派生类已经约束了种类,这里无须指定.

    C.问题

    (1)什么样的对象可以成为相关的或者相互依赖的?

    例如:windows界面中提供的Button类,Window类,List类等,这一系列是相关的;gtk界面中提供的Button类,Window类,List类,这一系列是相关的.

    (2)抽象工厂具体可以是什么形式的?

    抽象工厂类定义了创建对象的接口:

    class AbstractFactory

    {

        virtual AbstractButton createButton();

        virtual AbstractWindow createWindow();

        virtual AblstractList createList();

    };

    class WindowsFactory  : public AbstractFactory

    {

    AbstractButton createButton()

    {

    //创建windows系统上的Button组件

    }

    };

    class GtkFactory  : public AbstractFactory

    {

    AbstractButton createButton()

    {

    //创建gtk系统上的Button组件

    }

    };

    抽象工厂类提供了接口,具体子类来实现这些接口,这样的形式类似工厂方法定义接口子类实现的形式.

    (2)和工厂方法模式有什么不同?适用什么情况?

    工厂方法模式创建了一个对象,而抽象工厂提供了创建多个对象的接口.

    适用于创建一类产品这样的情况.

    作者:linucos

    出处:http://linucos.cnblogs.com

    声明因文章引起的任何问题,本博客不负任何责任;版权所有,欢迎转载 
  • 相关阅读:
    Alfred上可提高工作效率的Workflow推荐
    局部性原理——各类优化的基石
    持续学习——程序猿的军备竞赛
    http://regex.alf.nu/ 非标准答案
    13总结
    Ubuntu下python安装mysqldb(驱动)
    北大ACM试题分类+部分解题报告链接
    poj 3253 Fence Repair(优先队列+huffman树)
    Centos/Fedora下安装Twisted,failed with error code 1 in /tmp/pip-build-H1bj8E/twisted/解决方法
    关于command 'gcc' failed with exit status 1 解决方法
  • 原文地址:https://www.cnblogs.com/linucos/p/2225011.html
Copyright © 2011-2022 走看看