设计模式学习笔记--简单工厂模式

背景:

在开发过程中,经常会创建大量的对象,创建对象后还会涉及到一系列的初始化操作,而我们也不一定会只是在创建对象之后马上就使用对象,而且如果初始化操作很复杂,代码看起来就会非常杂乱,如果有变动,所有的初始化操作都要进行修改,相当难以维护。

功能:

将对象的创建和使用分离开来,专门用于创建对象并初始化。并且进行扩展后,可以根据参数不同,创建不同的对象。

例子:

// 设计模式Demo.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;

//被创建的对象基类
class Product
{
protected:
	int num;
	string name;
public:
	void setNum(int n)
	{
		num = n;
	}

	void setName(string na)
	{
		name = na;
	}

	virtual void show() = 0;
};

//子类1
class Product1 : public Product
{
	void show()
	{
		cout<<"Product1 num: "<<num<<" name: "<<name<<endl;
	}
};

//子类2
class Product2 : public Product
{
	void show()
	{
		cout<<"Product2 num: "<<num<<" name: "<<name<<endl;
	}
};

//简单工厂类
class SimpleFactory
{
public:
	static Product* GetProduct(int kind, int num, string name)
	{
		switch (kind)
		{
		case 1:
			{
				Product* product = new Product1();
				product->setNum(num);
				product->setName(name);
				return product;
			}
		case 2:
			{
				Product* product = new Product2();
				product->setNum(num);
				product->setName(name);
				return product;
			}
		default:
			return NULL;
		}
	}
};

int _tmain(int argc, _TCHAR* argv[])
{
	SimpleFactory factory;
	Product* product = factory.GetProduct(1, 0, "hehe");
	product->show();
	product = factory.GetProduct(2, 1, "haha");
	product->show();

	getchar();

	return 0;
}

结果:

Product1 num: 0 name: hehe

Product2 num: 1 name: haha

可见,使用了简单工厂模式之后,创建一个对象的代码变得十分简洁,修改时仅需要在工厂类内部进行一些修改,而不需要像原来一样,每次创建对象的地方都要进行修改。大大的增加了代码的简洁性。

时间: 2024-08-02 11:04:53

设计模式学习笔记--简单工厂模式的相关文章

[大话设计模式]学习笔记——简单工厂模式

序 说好的每天进步一点点的,结果工作太忙,一直在加班,都没有学习新东西.我还要进BAT呢. 坚持每天学习新东西. 写代码时,意识到在代码结构上还是有点欠缺.赶紧补上. 纪录对设计模式的认识.小菜变大鸟.进攻BAT. 应用场景: 编写一个计算器控制台程序,要求输入两个数和运算符号,得到结果. 这本书使用C#写的.已有博主用JAVA写出来,参考:http://blog.csdn.net/ghsau/article/details/8163418 常见的做法: 写一个方法封装计算机的功能,我们只需传参

设计模式学习(二)-简单工厂模式

---恢复内容开始--- 简单工厂设计模式 简单工厂模式定义: 简单工厂设计模式又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式.在简单工厂模式中,可以根据参数的不同返回不同类的实例.简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类. 简单工厂主要分为如下几个角色 抽象产品(abstract product):为所有具体产品的抽象表现,一般为抽象类 具体产品(product):为抽象产品的具体实现 生成产品工厂(facto

Java设计模式学习记录-简单工厂模式、工厂方法模式

前言 之前介绍了设计模式的原则和分类等概述.今天开启设计模式的学习,首先要介绍的就是工厂模式,在介绍工厂模式前会先介绍一下简单工厂模式,这样由浅入深来介绍. 简单工厂模式 做法:创建一个工厂(方法或类)用来制造对象. 当一个人想要用手机的时候,需要自己创建手机然后来使用. 如下: public class IphoneX { public IphoneX(){ System.out.println("##### 制造iphoneX #####"); } } public class I

设计模式学习之简单工厂模式

简单工厂模式,其实就是有一个静态的工厂方法,可以根据输出的条件返回对应的实例,然后再条用具体的实例的方法执行计算. 简单工厂模式相当与将条件判断都集中到了一个静态的工厂方法中.这样的好处是,执行具体计算任务的代码不需要再有很多的if判断,只专注于具体的计算.如果有新的计算需求,那么只需要增加相应的计算方法,并且在工厂方法中添加对应的入口条件就行了,对原有的计算方法没有任何影响. 一个简单计算器的实现例子如下 计算的类型接口: /** * @author wgyang * Create time:

设计模式学习一简单工厂模式

简单工厂模式 第一步, 创建父类A(抽象类),抽象方法,以及具体变量 第二步, 创建工厂类父类B,用于实现创建抽象类A 第三步, 创建要子类C,继承父类A,重载父类方法,写方法具体实现,以及变量具体赋值. 第四步, 创建工厂类D,继承工厂类父类B,用来创建具体实现的 子类C (相当于AC  是工厂里面的模板) (BD 是工厂里面生产的产品) 简单工厂模式,备忘

设计模式学习笔记--抽象工厂模式

1 using System; 2 3 namespace AbstractFactory 4 { 5 /// <summary> 6 /// 作者:bzyzhang 7 /// 时间:2016/5/28 10:23:20 8 /// 博客地址:http://www.cnblogs.com/bzyzhang/ 9 /// User说明:本代码版权归bzyzhang所有,使用时必须带上bzyzhang博客地址 10 /// </summary> 11 public class Use

设计模式学习03—抽象工厂模式

1.动机与定义 工厂模式中,一个工厂仅仅能提供一个或一类产品,当产品种类较多,形成产品系列(比方我们要创建跨平台的button,菜单,文本框等等一系列GUI控件: 单纯使用工厂模式会产生大量工厂,并且后期维护也不方便,我们能够从产品中找到规律,假设产品等级相对固定,以后仅仅会新增产品族,那么我们就能够把整个产品族放到一个工厂创建,以后新增其它系统产品族也很方便,例如以下图: 这样的模式就是抽象工厂,工厂方法模式针对的是一个产品等级结构,而抽象工厂模式则须要面对多个产品等级结构,一个工厂等级结构能

C#设计模式系列:简单工厂模式(Simple Factory)

1.简单工厂模式简介 1.1>.定义 简单工厂模式定义一个Factory类,可以根据参数的不同返回不同类的实例,被创建的实例通常有共同的父类. 简单工厂模式只需要一个Factory类. 简单工厂模式又称为静态工厂模式,Factory类为静态类或包含静态方法. 1.2>.使用频率  中 2.简单工厂模式结构 2.1>.结构图 2.2>.参与者 简单工厂模式参与者: ◊ Product:抽象产品类,将具体产品类公共的代码进行抽象和提取后封装在一个抽象产品类中. ◊ ConcretePr

(设计模式之一)浅析简单工厂模式

简单工厂模式 举个两个例子: 我输入两个数字和(+ - * /)其中一个符号,计算出两个数的结果. 饲养员让(狗 猫 鸟 猪)其中一个动物 叫 这里就是一个简单的工厂模式, 用户只需要提供他需要的接口,而不需要知道具体的实现 工厂判断用户提供的接口,创建对应的子类对象, 返回父类变量给用户(这里涉及里氏替换原则:声明父类变量替换子类对象) 当后面追加新的操作类例如:求根类  求平方类 , 从数据安全角度: 只需要创建新的类继承于Operation抽象类 ,从而不影响其他操作类(+ - * /),