设计模式之创建型模式—— 1.1 简单工厂模式

<?php
        
        /**
	* 1.1 简单工厂模式
	*
	* 解决的问题:
	* 	如何解决多个类实例化对象的问题。
	* 	注意:因为是简单工厂模式,所以要实例
	* 		  化的类不能太多,否则请使用1.2节
	* 		  的工厂方法模式。
	*
	* 解决方案:
	* 	建立一个工厂(即一个工厂类),通过参数的
	* 	传递动态决定应该创建哪一个产品类(这些
	* 	产品类继承自一个父类或接口)的实例。
	* 
	* 
	* 该模式中包含三种角色:
	* 	注:这里的角色指的就是类!
	* 	1. 抽象产品角色
	* 		职责:它是工厂角色所创建的对象的父
	* 		类。负责描述所有实例所共有的公共接
	* 		口。
	* 	2. 具体产品角色
	* 		职责:它是工厂角色所要创建的目标。
	* 			  负责具体产品的实例的所属,也
	* 			  就是说工厂角色所创建的对象实
	* 			  例属于哪个产品角色。
	*   3. 工厂角色
	* 		职责:它是简单工厂模式的核心。
	* 			  负责实现创建所有实例的内部逻
	* 			  辑.此工厂类中创建产品类的方法
	* 			  可以被客户端直接调用,以创建
	* 			  所需的产品对象。
	*
	* 	优点:
	* 		1. 具体产品的对象的创建有工厂角色统
	* 		   一完成,无需客户端再直接创建,使
	* 		   得客户端解放了出来。
	* 		2. 明确了客户端和服务端的具体分工。
	* 
	* 	缺点:
	* 		1. 所有实例的创建都集中在了工厂类中
	* 		   这违反了高内聚原则。
	* 		2. 如果添加新的产品类,那么工厂类就
	* 		   要随之改变。
	* 		3. 要事先知道有哪些类可以创建。
	*
	* 	使用场景:
	* 		1. 工厂类负责创建的对象比较少;
	* 		2. 客户端知道传入工厂类的参数,且
	* 		   对如何创建的逻辑不关心。
	* 		3. 由于简单工厂很容易违反高内聚责
	* 		   任分配原则,因此一般只在很简单
	* 		   的情况下应用。
	*/
	//抽象产品角色
	abstract class Operation {

		public static $numA;
		public static $numB;

		abstract protected function getResult();

	}

	//具体产品角色
	/**
	* 加法子类
	*/
	class Add extends Operation {
		public function getResult(){
			// return parent::$numA + $this->numB;
			return parent::$numA + parent::$numB;
		}
	}
	/**
	* 减法子类
	*/
	class Minus extends Operation {
		public function getResult(){
			return parent::$numA - parent::$numB;
		}
	}

	/**
	* 乘法子类
	*/
	class Mul extends Operation {
		public function getResult(){
			return parent::$numA * parent::$numB;
		}
	}

	/**
	* 除法子类
	*/
	class Div extends Operation {
		public function getResult(){
			if(parent::$numB != 0){
				return parent::$numA / parent::$numB;
			}
		}
	}

	//工厂角色
	// 定义一个类专门用于实例化加减乘除四个类
	class OperFactry{
		public static function createObj($oper){
			switch ($oper) {
				case ‘+‘:
					$obj=new Add();
					break;
				case ‘-‘:
					$obj=new Minus();
					break;
				case ‘*‘:
					$obj=new Mul();
					break;
				case ‘/‘:
					$obj=new Div();
					break;
				default:
					return;
			}
			return $obj;
		}
	}

//客户端

Operation::$numA=2;
Operation::$numB=3;

/**
 * 无简单工厂类:
 * 	此时,我们实现加减乘除运算时,要分别实例
 * 	个子类,然后再得到结果。这时,代码有重复
 * 	而且也显得比零乱,而且要事先知道有哪些类
 * 	可以被创建。
 */

$add=new Add();
echo $add->getResult().‘<br/>‘;
$minus=new Minus();
echo $minus->getResult().‘<br/>‘;
$mul=new Mul();
echo $mul->getResult().‘<br/>‘;
$div=new Div();
echo $div->getResult().‘<br/>‘;

/**
 * 有简单工厂类:
 * 	此时我们仅仅需要改变传递的参数即可。代码
 * 	简单清晰。它也要事先知道可以创建哪些类。
 */

$oper=OperFactry::createObj(‘-‘);
echo $oper->getResult();

?>
时间: 02-15

设计模式之创建型模式—— 1.1 简单工厂模式的相关文章

研磨设计模式解析及python代码实现——(一)简单工厂模式

最近在学设计模式,正巧书之前学了些python,但用的还不是很成熟.<研磨设计模式>书上只给了java代码,本着以练手为目标,我照着书上打了一遍java代码,在仔细体会其思想后,将其写成了python的代码.有不对的地方希望各位批评指正~ 具体原理不多做介绍,具体可以参考http://chjavach.iteye.com的博客,或者<研磨设计模式>的书. 一.背景介绍 接口思想: 众所周知,面向对象语言最大的特点便是封装,继承,多态这三个概念.而像Java等面向对象语言最核心的思想

工厂模式三部曲之简单工厂模式

今天,我们来谈一谈工厂模式三部曲之一——简单工厂模式(静态工厂模式).首先,先谈一下工厂模式吧,工厂模式根据抽象程度的不同划分为三种:简单工厂模式,工厂方法模式以及抽象工厂模式.它是编程中经常用到的一种模式哦.那么为什么这么受欢迎呢?1.可以使代码清晰,有效地封装变化.通过工厂模式将产品的实例化封装起来,调用者无需关心产品的实例化过程,只需要依赖工厂即可得到自己想要的产品.2.降低耦合度.产品类的实例化通常需要依赖很多的类,而这些类对于调用者来说根本无需知道,使用了工厂方法,我们需要做的仅仅是实

《JAVA与模式》之简单工厂模式 (转)

在阎宏博士的<JAVA与模式>一书中开头是这样描述简单工厂模式的:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例. 那么简单工厂模式是在什么场景下使用呢,下面就以本人的理解举例说明: 就拿登录功能来说,假如应用系统需要支持多种登录方式如:口令认证.域认证(口令认证通常是去数据库中验证用户,而域认证则是需要到微软的域中验证用户).那么自然的做法就是建立一个各种登录方式都适用的接口,如下图所

《JAVA与模式》之简单工厂模式

在阎宏博士的<JAVA与模式>一书中开头是这样描述简单工厂模式的:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例. 那么简单工厂模式是在什么场景下使用呢,下面就以本人的理解举例说明: 就拿登录功能来说,假如应用系统需要支持多种登录方式如:口令认证.域认证(口令认证通常是去数据库中验证用户,而域认证则是需要到微软的域中验证用户).那么自然的做法就是建立一个各种登录方式都适用的接口,如下图所

创建型模式1.2简单工厂模式

一.概念 简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例.从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一. 二.类图 三.具体介绍 简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例. 该模式中包含的角色及其职责 工厂(OpertionFactory)角色 简单工厂模式的核心,它负责实现创建所有实例的内部逻辑.工厂

iOS设计模式(代码分析系列2:简单工厂模式)

简单工厂模式示例代码下载地址, 1.简述 首先需要说明一下,简单工厂模式不属于23种GOF设计模式之一.它也称作静态工作方法模式,是工厂方法模式的特殊实现(也就是说工厂模式包含简单工厂模式).这里对简单工厂模式进行介绍,是为后面的工厂方法和抽象工厂模式做一个引子. 2.定义 "专门定义一个类来负责创建其他类的实例,被创建的实例通常具有共同的父类." 世界上就是由一个工厂类,根据传入的参数,动态地决定创建出哪一个产品类的实例. 3.结构图 简要分析结构图: ConcreteProduct

【Javascript设计模式】第二课 神奇的魔术师——简单工厂模式

所谓简单工厂模式就是由一个方法来决定到底要创建那个类的实例,而这些实例经常都拥有相同的接口. 简单工厂模式主要运用一下几种情况(添加个人理解) 1.对象的构建有规律性,大部分相同只有个别不同,重复代码多 2.需要依赖具体环境创建不同的实例 3.处理大量具有相同属性的小对象 具体我们来看一个小例子: 大家在开发过程中经常遇到登陆模块,首先看以下的的具体的需求: 1.用户在输入框中输入的内容不符合规范,需要定义一个提示框提示:"您输入的内容不符合规范,请重新输入" 2.用户登陆提示用户不存

Note8:C#设计模式—工厂方法模式(VS 简单工厂模式 &amp; 抽象工厂模式)

一.资源说明 (1)本文有参考:http://www.cnblogs.com/zhili/p/FactoryMethod.html 待更!

设计模式(一)——简单工厂模式

嵌入式linux 设计模式(一)--简单工厂模式 一.简单工厂模式简介 1.简单工厂模式 简单工厂模式(Factory Method Pattern)是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例. 简单工厂模式的UML类图 工厂角色(Creator):是简单工厂模式的核心,由它负责创建所有的类的内部逻辑.工厂类必须能够被