登录  /  注册
首页 > php教程 > php手册 > 正文

php实现设计模式之 简单工厂模式

php中文网
发布: 2016-06-06 19:47:39
原创
960人浏览过

作为对象的创建模式,用工厂方法代替new操作。 简单工厂模式是属于创建型模式,又叫做静态工厂方法模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。 工厂类,包含工厂方法,由参数决定实例化哪一种对象 多种

作为对象的创建模式,用工厂方法代替new操作。

简单工厂模式是属于创建型模式,又叫做静态工厂方法模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。

工厂类,包含工厂方法,由参数决定实例化哪一种对象

多种类,均含同一方法,实现具体业务

多种类继承一抽象类,抽象方法其子类必须都实现

 UML类图如下

php实现设计模式之    简单工厂模式

<?php /*
 * 工厂类,里面包含工厂方法,代替new操作,由参数决定创建哪一种对象
 */
class operator{
	public $a,$b,$oper;
	
	public function __construct($a,$b,$oper){
		$this->a = $a;
		$this-&gt;b = $b;
		$this-&gt;oper = $oper;
	}
	
	public function getresult(){
		switch ($this-&gt;oper){
			case 1: $model = new add($this-&gt;a,$this-&gt;b);break;
			case 2: $model = new jian($this-&gt;a,$this-&gt;b);break;
			case 3: $model = new cheng($this-&gt;a,$this-&gt;b);break;
			case 4: $model = new chu($this-&gt;a,$this-&gt;b);break;
		}
		return $model-&gt;result();
	}
}

/*
 * 抽象类,其子类必须实现运算方法
 */
abstract class poper{
	public $a,$b;
	public function __construct($a,$b){
		$this-&gt;a =$a;
		$this-&gt;b = $b;
	}
	abstract function result();
}

//子类,负责具体业务实现
class add extends poper{
	public function result(){
		return $this-&gt;a+$this-&gt;b;
	}
}

class jian extends poper{
	public function result(){
		return $this-&gt;a-$this-&gt;b;
	}
}

class cheng extends poper{
	public function result(){
		return $this-&gt;a*$this-&gt;b;
	}
}
class chu extends poper{
	public function result(){
		if($this-&gt;b ==0){
			return '除数不能为0';
		}
		return $this-&gt;a/$this-&gt;b;
	}
}
?&gt;
登录后复制

  

 客户端只需要输入参数,不关心对象的创建(交给了工厂方法)。区别于策略模式,策略模式客户端自己决定使用哪一种算法类

         试想一下:现在新增一个类。简单工厂模式需要写这个类,同时修改工厂类,修改工厂方法的逻辑。而策略模式只需要写这个类即可,客户端就可以替换了。

 

简单工厂方法所能创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类了。新增的类很多时,工厂方法逻辑判断多,蔓延维护困难。

使用场景 

工厂类负责创建的对象比较少而且事先知道所有类;(一般不多于5个)

客户只知道传入工厂类的参数,对于如何创建对象(逻辑)不关心

智能AI问答
PHP中文网智能助手能迅速回答你的编程问题,提供实时的代码和解决方案,帮助你解决各种难题。不仅如此,它还能提供编程资源和学习指导,帮助你快速提升编程技能。无论你是初学者还是专业人士,AI智能助手都能成为你的可靠助手,助力你在编程领域取得更大的成就。
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
关于CSS思维导图的课件在哪? 课件
凡人来自于2024-04-16 10:10:18
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号