php设计模式——工厂方法设计模式
来源:互联网 发布:淘宝主图尺寸怎么调整 编辑:程序博客网 时间:2024/06/16 06:27
概述
工厂设计模式作为一种创建型设计模式,即是创建某个产品。创建它的类向工厂发送请求,具体创建则由工厂来完成,由此达到产品与创建它的类松耦合的目的
简单工厂模式类图
简单的例子
参与者Creator类代码实例:
<?php abstract class Creator { protected abstract factoryMethod(); public function startFactory() { $p = $this->factoryMethod(); return $p; } } ?>
具体工厂类实现代码:
<?php include_once('Creator.php'); include_once('CatProduct.php'); class CatFactory extends Creator { protected function factoryMethod() { $product = new CatProduct(); return ($product->getProperties()); } } ?>
<?php include_once('Creator.php'); include_once('DogProduct.php'); class DogFactory extends Creator { protected function factoryMethod() { $product = new CatProduct(); return ($product->getProperties()); } } ?>
Product类具体实现:
<?php interface Product { public function getProperties(); } ?>
具体产品类实现代码:
<?php include_once('Product.php'); class DogProduct implements Product { private $mfgProduct; public function getProperties() { $this->mfgProduct = 'dog'; return $this->mfgProduct; } }?>
<?php include_once('Product.php'); class CatProduct implements Product { private $mfgProduct; public function getProperties() { $this->mfgProduct = 'cat'; return $this->mfgProduct; } }?>
客户端client具体实现代码
<?php include_once('CatFactory.php'): include_once('DogFactory.php'): class Client { private catObject; private dogObject; public function _construct() { $this->catObject = new CatFactory() echo $this->catObject->startFactory(); $this->dogObject = new DogFactory() echo $this->dogObject->startFactory(); } } $worker = new Client();?>
如上所述的简单工厂工厂模式中,一个工厂对应一个产品,若我需要建立新的产品,那么相应的工厂也需要增加,那么有什么办法只需一个工厂可以生产多个产品呢?答案是有的,那就是参数化工厂方法
参数化工厂设计实例
Creator代码示例
<?php abstract class Creator { protected abstract factoryMethod(Product $product); public function doFactory($productNow) { $p = $this->factoryMethod($productNow); return $p; } } ?>
ConcreteFactory工厂类代码
<?php include_once('Creator.php'); include_once('Product.php'); class ConcreteFactory extends Creator { private $p; protected function factoryMethod(Product $product) { $p = $product; return ($this->$p->getProperties()); } } ?>
Product类具体实现:
<?php interface Product { public function getProperties(); } ?>
具体产品类实现代码:
<?php include_once('Product.php'); class DogProduct implements Product { private $mfgProduct; public function getProperties() { $this->mfgProduct = 'dog'; return $this->mfgProduct; } }?>
<?php include_once('Product.php'); class CatProduct implements Product { private $mfgProduct; public function getProperties() { $this->mfgProduct = 'cat'; return $this->mfgProduct; } }?>
有参数客户端client具体实现代码
<?php include_once('CatProduct.php'): include_once('DogProduct.php'): include_once('ConcreteFactory.php'): class Client { private factory; public function _construct() { $this->factory= new ConcreteFactory(); echo $this->factory->doFactory(new DogProduct()); echo $this->factory->doFactory(new CatProduct()); } } $worker = new Client();?>
利用工厂模式,可以很方便的扩展新的产品,如示例代码:只要Product的getProperties()接口保持不变,在工厂方法设计中做任何改变或增补都不会导致破坏
阅读全文
0 0
- php设计模式——工厂方法设计模式
- PHP设计模式——工厂方法
- PHP生成对象之设计模式—工厂方法模式
- 设计模式—工厂方法
- 设计模式—工厂方法
- PHP设计模式——工厂方法模式(研磨设计模式学习笔记)
- 设计模式——工厂方法模式
- 设计模式——工厂方法模式
- 设计模式——工厂方法模式
- 设计模式——工厂方法模式
- 设计模式——工厂方法模式
- 设计模式——工厂方法模式
- 设计模式——工厂方法模式
- 设计模式——工厂方法模式
- 设计模式——工厂方法模式
- 设计模式——工厂方法模式
- 设计模式——工厂方法模式
- 设计模式——工厂方法模式
- Sky数
- Java反射获取成员方法
- 廖雪峰Git教程七-删除文件
- nyoj-915-+-字符串
- CRM WebUI快键键一览~
- php设计模式——工厂方法设计模式
- Netty初次使用
- 顺序统计量(Order Statistic)小结
- 寄生式继承
- 深度学习入门(一) 机器学习的定义与方法
- vue.js 2.0 关于ref--绑定dom对象并获取
- Python自学之高级语法特性
- RabbitMq、ActiveMq、ZeroMq、kafka之间的比较,资料汇总
- 求数列的和