PHP的设计模式之工厂模式
以前写代码老觉得,搞那么多乱七八槽的设计模式干嘛啊,这不是自己找罪受嘛。现在在这次的API开发过程中才晓得设计模式的厉害,真的是境界不到,永远不能领悟呀。还好坚持编码这么久,终于进入设计模式的运用了,算是一个进步。OK,废话不多说了,进入今天的主题,PHP(面向对象)的基础模式有三:工厂模式、单例模式、注册模式。今天想诉说工厂模式。
工厂模式的作用:不知道为什么用,就像一个人深藏千万两万金,却不知道黄金可以让他富可敌国一样。工厂模式,顾名思义就是一个工厂,这个工厂是生产类对象这个产品的。以前程序员需要对象时,都是new一个嘛,现在科技发达了,需要对象,咱们工厂去造一个嘛。以前new不是好好的吗?干嘛要去工厂,直接自己手工生产多方便,哪儿需要哪儿new,通过工厂还要经过一次中介,好麻烦。对,就是这个看似麻烦的过程就是它的作用,想一想,如果你有一个类,在你的项目中有50+个地方需要使用,OK,你就需要new50次,是的,有童靴会说,你用工厂方法还是要调用50次啊,没错,但是现在想一想,我这个类,构造方法变换了,需要多初始化一个参数,或者少初始化一个参数,如果你是直接new的,恭喜你,你就要改50+次,而我,只需要改改这个工厂的生产过程,也就是只修改一个地方。
现在明白了,这就是为什么有的人加班到苦逼,还是一个月只有四五千,有的人活的潇潇洒洒,月薪上万,革命尚未成功,咱们一起努力吧。
工厂模式简单代码:
需要被工厂生产的类:
- class Database {
- public function where($str){
- echo $str.'<br />';
- return $this;
- }
- }
工厂类:
- class Factory {
- public static function createInstance(){
- $instance = new Database();
- return $instance;
- }
- }
外部调用:
- $db = Factory::createInstance();
- $db->where('where')->order('order');
PHP的设计模式之工厂模式的更多相关文章
- 设计模式——抽象工厂模式及java实现
设计模式--抽象工厂模式及java实现 设计模式在大型软件工程中很重要,软件工程中采用了优秀的设计模式有利于代码维护,方便日后更改和添加功能. 设计模式有很多,而且也随着时间在不断增多,其中最著名的是 ...
- 5. 星际争霸之php设计模式--抽象工厂模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- 3. 星际争霸之php设计模式--简单工厂模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- 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#学习之设计模式:工厂模式
最近研究一下设计模式中工厂模式的应用,在此记录如下: 什么是工厂模式? 工厂模式属于设计模式中的创造型设计模式的一种.它的主要作用是协助我们创建对象,为创建对象提供最佳的方式.减少代码中的耦合程度,方 ...
- [JS设计模式]:工厂模式(3)
简单工厂模式是由一个方法来决定到底要创建哪个类的实例, 而这些实例经常都拥有相同的接口. 这种模式主要用在所实例化的类型在编译期并不能确定, 而是在执行期决定的情况. 说的通俗点,就像公司茶水间的饮料 ...
随机推荐
- TOJ4127: Root of String
传送门:http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=4127 4127: Root of ...
- unity农场模拟经营游戏源码
下载地址: https://item.taobao.com/item.htm?spm=a1z10.5-c-s.w4002-12305352547.10.25ca3c4eWAibvf&id=56 ...
- 使用插件和不使用插件实现select的框
# 1.select框单选 # 方式1 select1 = fields.ChoiceField( choices=[ (1,"select框方式1_1"), (2,"s ...
- windows核心编程
第一章 函数返回值: void:不可能失败.极少数会返回VOID BOOL:失败返回0 HANDLE:失败会返回NULL 或INVALID_HANDLE_VALUE PVOID:失败返回NULL wa ...
- 如何查看Chrome浏览器保存的账号密码
之前告诉大家如何一键查看所有保存在IE里的所有密码(点击查看原文),现在来告诉大家如何一键查看Chrome浏览器的所有密码.某种意义上上,查看Chrome的密码比查看IE的更简单,因为查看IE密码还需 ...
- org.springframework.web.util.Log4jWebConfigurer
org.springframework.web.util.Log4jWebConfigurer @Deprecated Deprecated. as of Spring 4.2.1, in favor ...
- linq 动态判断
以前要不是使用扩展方法 要么使用如(t==2&&判断条件)||(s==1&&判断条件) 其实可以简单的实现扩展一个whereIf即可(abp实现),如下所示 ··· / ...
- python 数据类型 之 tuple 元组
python 3.6.5 元组的特性和定义 与列表类型 只不过 [ ] 改成了() 特性: 1.不可变(元组本身不可变,但是可以存可变类型的element){猜测因为可变element的地址不可变而 ...
- js的回调函数详解
本文主要介绍了个人对于javascript中回调函数的理解和使用方法及示例,需要的朋友可以参考下 现在做native App 和Web App是主流,也就是说现在各种基于浏览器的web app框 ...
- 4A - 排序
输入一行数字,如果我们把这行数字中的‘5’都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以‘0’开头,这些头部的‘0’应该被忽略掉,除非这个整数就是由若干个‘0’组成的,这时这个整数 ...