2015-05-27
前面两节内容介绍了什么是设计模式以及六大原则,相信看完前两节内容大家对设计模式已经有了初步的认识,接下来说一下设计模式的分类。
一般将面向对象设计模式分为三类:创建型、结构型、行为型三种。
创建型:创建对象时,不再由我们直接实例化对象;而是根据特定场景,由程序来确定创建对象的方式,从而保证更大的性能、更好的架构优势。创建型模式主要有简单工厂模式(并不是23种设计模式之一)、工厂方法、抽象工厂模式、单例模式、生成器模式、原型模式。
结构型:用于帮助将多个对象组织成更大的结构。结构型模式主要有适配器模式、桥接模式、组合器模式、装饰器模式、门面模式、亨元模式和代理模式。
行为型:用于帮助系统间各对象的通信,以及如何控制复杂系统中流程。行为型模式主要有命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板模式、访问者模式和职责链模式。
今天主要介绍创建型的第一种简单工厂模式。
注意:在阅读本系列博客的时候一定要有阅读UML类图、面向对象PHP编程基础。
简单工厂模式不属于23种常用面向对象设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。其实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。
角色及职责:
工厂(SimpleFactory)角色:简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。
抽象产品(IProduct)角色:简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
具体产品(Concrete Product)角色:是简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。
需求:根据提供相应的属性值由简单工厂创建具有相应特性的产品对象。
现根据以上UML类图编写如下PHP代码。
xMax=$xMax; $this->yMax=1; } function XRotate() { echo 您好,我是X轴旋转产品,X轴转转转。。。。。。; } function YRotate() { echo 抱歉,我是X轴旋转产品,我没有Y轴。。。。。。; }}/**具体产品角色 * Class YProduct Y轴旋转产品 */class YProduct implements IProduct{ private $xMax=1; private $yMax=1; function __construct($xMax,$yMax) { $this->xMax=1; $this->yMax=$yMax; } function XRotate() { echo 抱歉,我是Y轴旋转产品,我没有X轴。。。。。。; } function YRotate() { echo 您好,我是Y轴旋转产品,Y轴转转转。。。。。。; }}/**具体产品角色 * Class XYProduct XY轴都可旋转产品 */class XYProduct implements IProduct{ private $xMax=1; private $yMax=1; function __construct($xMax,$yMax) { $this->xMax=$xMax; $this->yMax=$yMax; } function XRotate() { echo 您好,我是XY轴都可旋转产品,X轴转转转。。。。。。; } function YRotate() { echo 您好,我是XY轴都可旋转产品,Y轴转转转。。。。。。; }}/**工厂角色 * Class ProductFactory */class ProductFactory{ static function GetInstance($xMax,$yMax) { if($xMax>1 && $yMax===1) { return new XProduct($xMax,$yMax); } elseif($xMax===1 && $yMax>1) { return new YProduct($xMax,$yMax); } elseif($xMax>1 && $yMax>1) { return new XYProduct($xMax,$yMax); } else { return null; } }}
; $v->XRotate(); echo ; $v->YRotate(); } else { echo 非法产品!; } echo
简单工厂的优点:让对象的调用者和对象创建过程分离,当对象调用者需要对象时,直接向工厂请求即可。从而避免了对象的调用者与对象的实现类以硬编码方式耦合,以提高系统的可维护性、可扩展性。
简单工厂的缺点:当产品修改时,工厂类也要做相应的修改,比如要增加一种操作类,如求M数的N次方,就得改case,修改原有类,违背了开放-封闭原则。
1
CI框架连接数据库配置操作以及多数据库操作
09-05
2
asp 简单读取数据表并列出来 ASP如何快速从数据库读取大量数据
05-17
3
C语言关键字及其解释介绍 C语言32个关键字详解
04-05
4
C语言中sizeof是什么意思 c语言里sizeof怎样用法详解
04-26
5
最简单的asp登陆界面代码 asp登陆界面源代码详细介绍
04-12
6
PHP中的魔术方法 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep,
09-05
7
PHP中的(++i)前缀自增 和 (i++)后缀自增
09-05
8
PHP中include和require区别之我见
09-05
常用dos命令及语法
2014-09-27
将视频设置为Android手机开机动画的教程
2014-12-11
php递归返回值的问题
2014-09-05
如何安装PHPstorm并配置方法教程 phpstorm安装后要进行哪些配置
2017-05-03
PHP 教程之如何使用BLOB存取图片信息实例
2014-09-05
java中的info是什么意思
2022-03-24
IcePHP框架中的快速后台中的通用CRUD功能框架
2014-09-05
单片机编程好学吗?单片机初学者怎样看懂代码
2022-03-21
PHP数组函数array
2014-09-05
学ug编程如何快速入门?
2022-03-17
逃跑吧少年官方正版手游下载v8.33.0 安卓2025手机版
动作闯关 1.33G
下载宝宝梦想小镇宝宝巴士最新版下载v9.87.00.00 安卓官方版
其它手游 95.9M
下载宝宝爱刷牙宝宝巴士教育版下载v9.87.00.00 安卓版
其它手游 148.0M
下载小玛丽捕鱼官方正版下载v5.13.0 安卓版
休闲益智 122.0M
下载小玛丽捕鱼旧版安装下载v5.10.10 安卓官方版
休闲益智 122.0M
下载原神bilibili服官方版下载v5.8.0 安卓哔哩哔哩服
其它手游 389.7M
下载天天捕鱼电玩版赢话费官方版下载v11.0 安卓版
休闲益智 89.8M
下载遇见龙2手游下载v1.1.157 安卓版
卡牌对战 1.29G
下载太空杀国际版(Super Sus)下载v1.67.25.031 安卓版
下载
变形金刚地球之战官方版下载v25.1.1.381 安卓最新版
下载
极限捕鱼安卓版下载v6.47.6.0.5.4 赢话费正版
下载
极限捕鱼高爆版游戏下载v6.47.6.0.5.4 安卓暴击版
下载
极限捕鱼万炮版下载v6.47.6.0.5.4 安卓加强版
下载
极限捕鱼达人版下载v6.47.6.0.5.4 安卓版
下载
2025pubgmobile国际服地铁逃生下载v3.9.0 安卓正版
下载
神灵部落官方下载v2.0 安卓版
下载