zoukankan      html  css  js  c++  java
  • 一.创建型模式 Factory

    Factory

    引出:为了提高内聚 和 松 耦合 ,我们经常会抽象出一些类的公共接口以形成抽象基类或者接口

         通过声明一个指向基类的指针来指向实际的子类达到多态的目的。 问题:多子类继承抽象基类

        我们需要new XXX来用到子类 。

    • 1. 客户程序员想使用必须知道子类的名字( 系统复杂 可能冲突 可记忆性差等问题  (程序的扩展性和维护变得越来越困难
    • 2. 父类不知道要实例化哪个具体子类。

    Factory 模式的两个最重要的功能:

    • 1)定义创建对象的接口,封装了对象的创建;
    • 2)使得具体化类的工作延迟到了子类中

      声明一个创建对象的接口,并封装了对象的创建过程。

      提供一个对象创建对象的接口,并在子类中提供其具体实现

    #include"Factory.h"
    #include"Product.h"
    #include<iostream>
    using namespace std;
    int main()
    {
        Factory *fact = new ConcreteFactory;
    
        Product *p = fact->createProduct();
        system("pause");
        return 0;
    }
    main
    #include "Factory.h"
    
    
    
    Factory::Factory()
    {
    }
    
    
    Factory::~Factory()
    {
    }
    
    ConcreteFactory::ConcreteFactory()
    {
        cout << "ConcreteFactory" << endl;
    }
    
    ConcreteFactory::~ConcreteFactory()
    {
    }
    
    Product * ConcreteFactory::createProduct()
    {
        return new ConcreteProduct;
    }
    Factory.cpp
    #ifndef FACTORY_H
    #define FACTORY_H
    
    #include"Product.h"
    #include<iostream>
    using namespace std;
    
    
    class Factory
    {
    public:
        Factory();
        virtual Product* createProduct() = 0;
        ~Factory();
    };
    
    class ConcreteFactory:public Factory
    {
    public:
        ConcreteFactory();
        ~ConcreteFactory();
    
        Product* createProduct();
    
    private:
    
    };
    
    
    
    #endif // !FACTORY_H
    Factory.h
    #ifndef PRODUCT_H
    #define PRODUCT_H
    
    
    class Product
    {
    public:
        Product();
        virtual~Product() = 0;
    };
    
    class ConcreteProduct:public Product
    {
    public:
        ConcreteProduct();
        ~ConcreteProduct();
    
    private:
    
    };
    
    
    #endif // !PRODUCT_H
    Product.h
    #include "Product.h"
    #include<iostream>
    
    using namespace std;
    
    
    Product::Product()
    {
    }
    
    
    Product::~Product()
    {
    }
    ConcreteProduct::ConcreteProduct()
    {
        cout << "ConcreteProduct" << endl;
    }
    
    ConcreteProduct::~ConcreteProduct()
    {
    }
    Product.cpp

     局限:不符合开闭原则

        

  • 相关阅读:
    5月7日 python学习总结 MySQL数据库(一)
    5月4日 python学习总结 socketserver
    5月2日 python学习总结 IO模型
    4月28日 python学习总结 线程与协程
    4月27日 python学习总结 GIL、进程池、线程池、同步、异步、阻塞、非阻塞
    4月26日 python学习总结 JoinableQueue、线程、三种锁
    4月25日 python学习总结 互斥锁 IPC通信 和 生产者消费者模型
    4月24日 python学习总结 多进程与子进程
    DataNode数据处理中心DataXceiver
    DataNode数据处理中心DataXceiver
  • 原文地址:https://www.cnblogs.com/jingchu/p/10022185.html
Copyright © 2011-2022 走看看