一.创建型模式 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

 

 局限:不符合开闭原则

 

    

 

posted @ 2018-11-26 18:57  Lumi_Imp  阅读(142)  评论(0编辑  收藏  举报