• 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);
    }
  • 相关阅读:
    微软SmartClient高级开发
    JavaScript教程大全目录( 最后更新:2007/2/27 不断更新中...)
    智能客户端的定义
    JavaScript浏览器输出
    事半功倍系列之javascript
    智能客户端SmartClient (三)
    智能客户端SmartClient (一)
    日文假名输入与键盘对应
    连体词、接续词、接续助词相关
    JavaScript表单
  • 原文地址:https://www.cnblogs.com/raichen/p/5669630.html
Copyright © 2020-2023  润新知