zoukankan      html  css  js  c++  java
  • Factroy 简单工厂

    意图

    定义一个用于创建对象的接口,让子类决定实例化哪一个类。 Factory Method使一个类的实例化延迟到其子类。

    动机

    框架使用抽象类定义和维护对象之间的关系。这些对象的创建通常也由框架负责。框架必须实例化类,但是它只知道不能被实例化的抽象类。

    适用性

    • 当一个类不知道它所必须创建的对象的类的时候。
    • 当一个类希望由它的子类来指定它所创建的对象的时候。
    • 当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。

    结构

    参与者

    Product:定义工厂方法所创建的对象的接口

    ConcreteProduct:实现Product接口

    Creator:声明工厂方法,该方法返回一个Product类型的对象。Creator也可以定义一个工厂方法的缺省实现,它返回一个Product类型的对象。Creator也可以定义一个工厂方法的缺省实现,它返回一个缺省的ConcretePruduct实例

    ConcreteCreator:重定义工厂方法以返回一个ConcreteProduct实例

    协作

    Creator依赖于它的子类来定义工厂方法,所以它返回一个适当的ConcreteProduct实例

    实现

    主要有两种不同的情况:
    1)第一种情况是,Creator类是一个抽象类并且不提供它所声明的工厂方法的实现。
    2)第二种情况是,Creator是一个具体的类而且为工厂方法提供一个缺省的实现。

    //MyProduct和YourProduct是Product的子类
    class Creator
    {
    public:
        virtual Proruct * Create(PruductId);
    };
    
    Product * Creator::Create(ProductId id)
    {
        if (id == MINE) return new MyProduct;
        if (id == YOURS) return new YourProduct;
    
        return 0;
    }

    子类MyCreator可以减缓MyProduct和YourProduct并且支持一个新的子类TheirProduct;最后返回父类的Create是它对其它类不感兴趣,交给父类Create处理:

    Product * MyCreator::Create(ProductId id)
    {
        if (id == MINE) return new MyProduct;
        if (id == YOURS) return new YourProduct;
        if (id == THEIRS) return new TheirProduct;
    
        return Creator::Create(id);
    }
  • 相关阅读:
    面向对象--接口的实际应用--制定标准
    iconv命令 gbk 转 UTF-8
    map,list
    springMVC配置(XML配置详解)
    关于git-Git 分支管理和冲突解决
    使用Intellij idea开发
    Centos7.2 Install subversion server
    Nginx 多域名配置
    Nginx 解析PHP的原理 | CGI、FastCGI及php-fpm的关系
    Centos7 Yum安装 PHP5.5,5.6,7.0
  • 原文地址:https://www.cnblogs.com/raichen/p/5669630.html
Copyright © 2011-2022 走看看