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);
    }
  • 相关阅读:
    python 操作mysql
    python多线程
    python socket 网络编程
    nginx源码编译安装
    CentOS网卡配置文件
    使用本地yum源
    ping github 请求超时
    ping github 请求超时
    设计模式-装饰器模式
    设计模式-装饰器模式
  • 原文地址:https://www.cnblogs.com/raichen/p/5669630.html
Copyright © 2011-2022 走看看