设计模式(3) 工厂方法模式

原创 2016年08月29日 21:49:38

1.意图

定义一个用于创建对象的的接口,让子类决定实例化哪一个类.

2.适用性

当一个类不知道它必须所创建的对象的类的时候。

当一个类希望由它的子类来指定它所创建的对象的时候。


3.抽象工厂和工厂方法的区别:

“抽象工厂”模式依赖于“工厂方法”模式的。因此,抽象工厂强调的是前面的动词“抽象”,也就是说,你将工厂方法模式中的工厂方法抽象出来的那个"动作或设计"就是“抽象工程”模式了。
---------------------------------
factory method针对的是一个产品等级结构  
abstract factory是面向多个产品等级结构的
---------------------------------
工厂方法模式:一个抽象产品类,可以派生出多个具体产品类。 
                              一个抽象工厂类,可以派生出多个具体工厂类。 
                              每个具体工厂类只能创建一个具体产品类的实例。 
抽象工厂模式:多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。 
                              一个抽象工厂类,可以派生出多个具体工厂类。 
                              每个具体工厂类可以创建多个具体产品类的实例。 
  
区别:工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。
      工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。

#include<iostream>
#include <string>
#include <iomanip>

using namespace std;

//产品基类
class Product {
public:
	string _name;
public:
	Product(const string& name) {
		_name = name;
	}
};
//具体产品
class ProductA :public Product {
public:
	ProductA(const string& name) :Product(name) {};
};

class ProductB :public Product {
public:
	ProductB(const string& name) :Product(name) {};
};

class ProductC :public Product {
public:
	ProductC(const string& name) :Product(name) {};
};

//基类工厂
class Creator {
public:
	//工厂方法 可由子类覆盖
	virtual Product* Create(const string& productName) {
		if (productName == "A") return new ProductA("A");
		if (productName == "B") return new ProductB("B");
		if (productName == "C") return new ProductC("C");
		return nullptr;
	}
};


class StanderCreator :public Creator {
public:
	Product* Create(const string& productName)  {
		if (productName == "A") return new ProductB("B");
		if (productName == "B") return new ProductA("A");
		//这步操作表示具体工厂对其它类不感兴趣 交给基类去处理;
		return Creator::Create(productName);
	}

};


int main() {
	Creator* creator = new StanderCreator();
	Product* product = creator->Create("A");
	cout << product->_name << endl;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

23种设计模式----创建型模式(工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式)

1.单例模式  单例模式(Singleton Pattern):确保某一个类只有一个实例,而且自己实例化并向整个系统提供这个实例。   通用类图如下:      通用代码如下:public cl...
  • oChangWen
  • oChangWen
  • 2017年06月17日 21:37
  • 440

Java设计模式之工厂方法模式【Factory Method Pattern】

工厂方法模式(FACTORY METHOD)是一种常用的对象创建型设计模式,此模式的核心精神是封装类中不变的部分,提取其中个性化善变的部分为独立类,通过依赖注入以达到解耦、复用和方便后期维护拓展的目的...
  • Lixuanshengchao
  • Lixuanshengchao
  • 2016年05月04日 21:27
  • 958

软件设计模式——工厂方法模式(Factory Method)

工厂方法模式去掉了简单工厂模式中工厂方法的静态属性,使得它可以被子类继承。通俗的来说就是把简单工厂模式里面的分支语句给去掉,将每个具体产品的实例化过程放到相应的产品中去。相应的角色如下: (1)抽象...
  • Jungle_hello
  • Jungle_hello
  • 2016年04月13日 22:51
  • 900

Java设计模式之“工厂方法模式”

工厂方法模式 与简单工厂模式不同的是,简单工厂模式是工厂自己去实现对所有产品的构造的过程。根据不同的指令去生产对应的产品。但是,如果需求有变更,有新的产品需要去生产,或者有旧的产品不必去生产,都需要去...
  • DucklikeJAVA
  • DucklikeJAVA
  • 2016年03月25日 21:45
  • 523

Java设计模式菜鸟系列(四)工厂方法模式建模与实现

转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39760895 工厂方法模式(Factory Method)分为三种: 一、普通工厂模式。...
  • JAVE_LOVER
  • JAVE_LOVER
  • 2014年10月04日 22:29
  • 2593

Java设计模式—工厂方法模式&抽象工厂模式

工厂方法模式与抽象工厂模式都是设计模式中重要而且常见的模式。 通用类图如下:         在工厂方法模式中,抽象产品类Product负责定义产品的共性,实现对事物最抽象的定义;C...
  • qq_25827845
  • qq_25827845
  • 2016年09月11日 15:07
  • 4685

工厂方法模式(Factory Method)-最易懂的设计模式解析

前言在上文提到的最易懂的设计模式系列解析:简单工厂模式,发现简单工厂模式存在一系列问题: 工厂类集中了所有实例(产品)的创建逻辑,一旦这个工厂不能正常工作,整个系统都会受到影响; 违背“开放 - 关闭...
  • carson_ho
  • carson_ho
  • 2016年08月28日 08:31
  • 3655

大话设计模式C++实现-第8章-工厂方法模式

一、UML图 二、包含的角色 (1)抽象工厂 (2)具体工厂 (3)抽象产品 (4)具体产品 三、优势 (1)工厂方法模式是对简单工厂模式的稍微的改进。工厂方法模式的用意是定义一个创建产品对象的工...
  • XD_lixin
  • XD_lixin
  • 2014年11月09日 22:26
  • 1834

【设计模式】简单工厂模式与工厂方法模式详细解读

1.前言     设计模式,各具特色,今天在此总结一下常见模式中 简单工厂模式与工厂方法模式的区别与联系 2.两种模式概要    1. 简单工厂模式         对于简单工厂模式的介绍,请...
  • yudandan10
  • yudandan10
  • 2013年03月10日 15:09
  • 4753

设计模式实战应用之五:工厂方法模式

工厂方法模式的应用相当广泛。工厂方法模式在 Java API 中的应用比比皆是:java.util.Collection 接口的 iterator 方法就是一个很著名的抽象工厂方法的示例;java.n...
  • defonds
  • defonds
  • 2014年07月30日 18:23
  • 4616
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:设计模式(3) 工厂方法模式
举报原因:
原因补充:

(最多只允许输入30个字)