设计模式学习笔记二 ——工厂模式
2017-03-27 20:13
471 查看
工厂模式
工厂模式的意义在于定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口
工厂模式同时也是一种类的管理模式。处于工厂模式下的开发,将多个属于同样类型的类集合在一起(具体产品角色),在他们之上创建一个工厂类(工厂角色),负责根据传入的参数实例化对应的产品对象并按业务初始化赋值对象属性。按抽象的思维方法,还可以在具体产品和工厂之间创建一个具体产品的抽象类(抽象产品角色),抽象出所有具体产品共有的方法和属性,进一步提高复用度、降低冗余。
Factory模式的应用并不是只是为了封装对象的创建,而是要把对象的创建放到子类中实现:Factory中只是提供了对象创建的接口,其实现放在Factory的子类ConcereteFactory中进行
<script src="https://code.csdn.net/snippets/2294888.js"></script>
factory.h
#ifndef _FACTORY_H_
#define _FACTORY_H_
class Product;
class Factory
{
public:
virtual ~Factory();
virtual Product* CreateProduct()=0;
Protected:
Factory();
};
class ConcreteFactory:public Factory
{
public:
~ConcreteFactory();
ConcreteFactory();
Product *CreateProduct();
}
factory.cpp
#include "Factory.h"
#include "Product.h"
#include<iostream>
using namespace std;
Factory::Factory()
{
}
Factory::~Factory()
{
}
ConcreteFactory::ConcreteFactory()
{
cout<<"ConcreteFactory..."<<endl;
}
ConcreteFactory::~ConcreteFactory()
{
}
Product* ConcreteFactory::CreateProduct()
{
return new ConcreteProduct();
}
Product.h
#ifndef _PRODUCT_H_
#define _PRODUCT_H_
class Product
{
public:
virtual ~Product()=0;
protected: //屏蔽构造函数
Product();
};
class ConcreteProduct:public Product
{
public:
~ConcreteProduct();
ConcreteProduct();
}
Product.cpp
#include "Product.h"
#include<iostream>
using namespace std;
Product::Product()
{
}
Product::~Product()
{
}
ConcreteProduct::ConcreteProduct()
{
cout<<"ConcreteProduct..."<<endl;
}
ConcreteProduct::~ConcreteProduct()
{
}
main.cpp
#include "Factory.h"
#include "Product.h"
#include<iostream>
using namespace std;
int main(int argc,char* argv[])
{
Factory *fac = new ConcreteFactory();
Product *p = fac->CreateProduct();
return 0;
}
工厂模式的意义在于定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口
工厂模式同时也是一种类的管理模式。处于工厂模式下的开发,将多个属于同样类型的类集合在一起(具体产品角色),在他们之上创建一个工厂类(工厂角色),负责根据传入的参数实例化对应的产品对象并按业务初始化赋值对象属性。按抽象的思维方法,还可以在具体产品和工厂之间创建一个具体产品的抽象类(抽象产品角色),抽象出所有具体产品共有的方法和属性,进一步提高复用度、降低冗余。
Factory模式的应用并不是只是为了封装对象的创建,而是要把对象的创建放到子类中实现:Factory中只是提供了对象创建的接口,其实现放在Factory的子类ConcereteFactory中进行
<script src="https://code.csdn.net/snippets/2294888.js"></script>
factory.h
#ifndef _FACTORY_H_
#define _FACTORY_H_
class Product;
class Factory
{
public:
virtual ~Factory();
virtual Product* CreateProduct()=0;
Protected:
Factory();
};
class ConcreteFactory:public Factory
{
public:
~ConcreteFactory();
ConcreteFactory();
Product *CreateProduct();
}
factory.cpp
#include "Factory.h"
#include "Product.h"
#include<iostream>
using namespace std;
Factory::Factory()
{
}
Factory::~Factory()
{
}
ConcreteFactory::ConcreteFactory()
{
cout<<"ConcreteFactory..."<<endl;
}
ConcreteFactory::~ConcreteFactory()
{
}
Product* ConcreteFactory::CreateProduct()
{
return new ConcreteProduct();
}
Product.h
#ifndef _PRODUCT_H_
#define _PRODUCT_H_
class Product
{
public:
virtual ~Product()=0;
protected: //屏蔽构造函数
Product();
};
class ConcreteProduct:public Product
{
public:
~ConcreteProduct();
ConcreteProduct();
}
Product.cpp
#include "Product.h"
#include<iostream>
using namespace std;
Product::Product()
{
}
Product::~Product()
{
}
ConcreteProduct::ConcreteProduct()
{
cout<<"ConcreteProduct..."<<endl;
}
ConcreteProduct::~ConcreteProduct()
{
}
main.cpp
#include "Factory.h"
#include "Product.h"
#include<iostream>
using namespace std;
int main(int argc,char* argv[])
{
Factory *fac = new ConcreteFactory();
Product *p = fac->CreateProduct();
return 0;
}
相关文章推荐
- Head First 设计模式学习笔记(4)---工厂模式
- 设计模式学习笔记三:简单工厂(Simple Factory)
- 设计模式学习笔记之(一、工厂模式)
- 设计模式学习笔记(四)之工厂模式(Factory)
- 设计模式学习笔记——简单工厂(Simple Factory)
- 设计模式学习笔记:factory method(工厂方法)
- .net设计模式之工厂模式学习笔记
- 设计模式学习笔记-工厂方法
- java 设计模式 学习笔记(1) - 简单工厂模式
- 设计模式学习笔记:就一句话的创建实例是如何演变成工厂模式的?
- 学习笔记之设计模式:抽象工厂
- 设计模式学习笔记之工厂模式
- 设计模式学习笔记-----工厂模式
- C#面向对象设计模式纵横谈 学习笔记3 Abstract Factory 抽象工厂
- C#设计模式学习笔记---简单工厂模式
- HeadFirst 设计模式学习笔记4--工厂模式
- 设计模式学习笔记(二)--简单工厂模式
- 简单工厂模式(未完成)——小鸟学习设计模式笔记系列
- 设计模式学习笔记(一):抽象工厂
- 设计模式学习笔记六:.NET反射工厂