2018/04/16 PHP 设计模式之工厂模式
学习设计模式一定要知道它是为了什么而产生的,凡事一定有原因。
站在巨人的肩膀上学习,推荐两篇文章
--
设想一种情况:
现在我们在我们程序里面 新建了一个 mysqli 扩展的类,里面封装了数据库的一系列操作。
在我需要的时候,我会使用 new mysqli() 来调用我的数据库封装方法。
但是,有一天,我发现 mysqli 不好用了,我想用 PDO 了。
那么......
我在我的程序里面已经使用了成百次的 new mysqli 这个类,难道还是需要一个个去改么?
--
上面已经说明了在普通时候的尴尬性,所以我们需要来对这类进行解耦。
现在才感受到了“高内聚低耦合”的博大精深。没问题,工厂方法可以解决这个问题。
工厂模式的优点就在创建对象上。
工厂模式的优点就在创建对象上。建立一个工厂(一个函数或一个类方法)来制造新的对象,它的任务就是把对象的创建过程都封装起来,
创建对象不是使用new的形式了。而是定义一个方法,用于创建对象实例。
--
说道这里,反正我已经是蒙了,总的来说,工厂模式的目的是为了把新建对象的过程封装起来,只返回对象的结果
--
下面我们用代码来实现下
1:简单工厂模式
【适用范围】
工厂类负责创建的对象较少,操作时只需知道传入工厂类的参数即可,对于如何创建对象过程不用关心。
<?php
class A {}
class B {}
class Factoty
{
// 简单工厂里的静态方法-用于创建A对象
static function createA()
{
return new A();
}
// 简单工厂里的静态方法-用于创建B对象
static function createB()
{
return new B();
}
}
$A = Factoty::createA();
$B = Factoty::createB();
这里我们隐藏了实例对象的细节,在对于对象修改中只需要修改简单的代码就可以完成。
但是他不适合对象的反复添加,只适合固定的对象。
--
2:工厂方法模式
【适用范围】
一个类希望由子类来指定它所创建的对象时,简单来说,就是希望父类的实现方式可以以子类的继承实现,这样可以扩展出不同的类,也体现的类的多态。
// 定义一个接口类
interface people
{
public function create();
}
// 由子类来继承实现
class Factory implements people
{
public function create()
{
return new A();
}
}
这样可以一直扩展多个子类。并且有好的扩展性。
--
其实关于工厂模式,一定要找到他的重点,他想干什么?
工厂模式主要就是为了解决在创建对象上产生的高耦合,使他们可以模块化,松散的组合在一起。
只要我们知道他想干什么,工厂模式可以有很多方式来实现。
2018/04/16 PHP 设计模式之工厂模式的更多相关文章
- 5. 星际争霸之php设计模式--抽象工厂模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- 3. 星际争霸之php设计模式--简单工厂模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- 设计模式——抽象工厂模式及java实现
设计模式--抽象工厂模式及java实现 设计模式在大型软件工程中很重要,软件工程中采用了优秀的设计模式有利于代码维护,方便日后更改和添加功能. 设计模式有很多,而且也随着时间在不断增多,其中最著名的是 ...
- iOS 设计模式之工厂模式
iOS 设计模式之工厂模式 分类: 设计模式2014-02-10 18:05 11020人阅读 评论(2) 收藏 举报 ios设计模式 工厂模式我的理解是:他就是为了创建对象的 创建对象的时候,我们一 ...
- 设计模式之工厂模式(Factory)
设计模式的工厂模式一共有三种:简单工厂模式,工厂模式,抽象工厂模式 简单工厂模式原理:只有一个工厂类,通过传参的形式确定所创建的产品对象种类 代码如下: #include <stdio.h> ...
- php设计模式:工厂模式
php设计模式:工厂模式 意图: 定义一个用于创建对象的接口,让子类决定实例化哪一个类. 工厂模式实现: 工厂模式中任何创建对象的工厂类都要实现这个接口,实现接口的方法体中都要实现接口中的方法,它声明 ...
- 浅析JAVA设计模式之工厂模式(一)
1 工厂模式简单介绍 工厂模式的定义:简单地说,用来实例化对象,取代new操作. 工厂模式专门负责将大量有共同接口的类实例化.工作模式能够动态决定将哪一个类实例化.不用先知道每次要实例化哪一个类. 工 ...
- java 设计模式之工厂模式与反射的结合
工厂模式: /** * @author Rollen-Holt 设计模式之 工厂模式 */ interface fruit{ public abstract void eat(); } ...
- C#学习之设计模式:工厂模式
最近研究一下设计模式中工厂模式的应用,在此记录如下: 什么是工厂模式? 工厂模式属于设计模式中的创造型设计模式的一种.它的主要作用是协助我们创建对象,为创建对象提供最佳的方式.减少代码中的耦合程度,方 ...
随机推荐
- 51单片机的idata,xdata,pdata,data的详解(转)
data: 固定指前面0x00-0x7f的128个RAM,可以用acc直接读写的,速度最快,生成的代码也最小. bit :是指0x20-0x2f的可位寻址区idata:固定指前面0x00-0xff的2 ...
- javaweb项目中表单生成的验证码以及校验
首先先来看一下项目的结构吧,有两个servlet,一个是进行验证码的生成以及存储的,一个是进行校验的,还有一个jsp页面是用来实现form表单的书写和展示: 我们只需要看这三个就行了,其他的自动忽略: ...
- JSPatch实现原理详解<二>
本文转载至 http://blog.cnbang.net/tech/2855/ 距离上次写的<JSPatch实现原理详解>有一个月的时间,在这段时间里 JSPatch 在不断地完善和改进, ...
- android模拟器与PC的端口映射
一.概述 Android系统为实现通信将PC电脑IP设置为10.0.2.2,自身设置为127.0.0.1,而PC并没有为Android模拟器系统指定IP,所以PC电脑不能通过IP来直接访问Androi ...
- Mac下安装和卸载MySQL(含配置)
安装 首先需要下载 MySQL Community Server 下载地址:https://dev.mysql.com/downloads/mysql/ 进入MySQL的下载界面(https://d ...
- 服务器搭建--Linux安装erlang
1.安装依赖环境: 1)安装GCC GCC-C++ Openssl等模块,安装过就不需要安装了 yum -y install make gcc gcc-c++ kernel-devel m4 ncur ...
- 【Java知识点专项练习】之 volatile 关键字的功能
volatile是java中的一个类型修饰符.它是被设计用来修饰被不同线程访问和修改的变量.如果不加入volatile,基本上会导致这样的结果:要么无法编写多线程程序,要么编译器 失去大量优化的机会. ...
- WP8.1学习系列(第六章)——中心控件Hub面板部分交互UX
本主题中呈现的模型类似于适用于 Windows Phone 的具有主页菜单(中心或透视控件)的中心应用中描述的模型.正如之前的案例所示,你要向用户呈现不同的功能区域.此处的区别在于你可以在顶层呈现所有 ...
- Simple Mail Transfer Protocol --- SMTP协议
https://en.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol Simple Mail Transfer Protocol
- MAC升级node及npm
清除node.js的cache: sudo npm cache clean -f 安装 n 工具,这个工具是专门用来管理node.js版本的,别怀疑这个工具的名字,是他是他就是他,他的名字就是 &qu ...