一天学一个设计模式之(二):简单工厂模式
2017-05-26 00:00
162 查看
首先我们先回顾一下昨天学的单例模式:
一个类只能被实例化一次。最常见的场景就是一个数据库的链接,我们每次请求只需要连接一次,也就是说如果我们用来写类的话,只需要一次实例就够了。
应用中:首先私有化构造方法,然后创建一个静态方法,如果不存在这个类的实例属性,就创建一个,否则就取这个实例。
简单工厂模式:
本来我们要获取一个类的实例,需要用到new关键字。但是如果new 直接写到业务代码里,一个类在很多地方都实例化过,以后要是这个类出了什么问题,比如要改个名字(实际中,你更多的可能是修改构造函数方法),那么就尴尬了,需要改很多地方。
工厂模式,顾名思义,就是不用new来获得实例,而是把业务类放进一个工场类里,由工厂(类)『生产』出对应的实例。
实现代码:
simpleFactory.php
Bicyle.php
使用:
我们需要什么样的实例,就到工厂的实例方法里去拿。这里只定义了一个类的实例,你可以定义更多。
我们看到,业务代码里没有出现 new以及那个具体的业务类, 这样 业务类(class Bicycle)我们可以随便改,以后更新的时候只要在工厂类(class SimpleFactory)里修改一次,就可以一对多的在各处生效了。
但是,这个方法名字 $factory->createBicycle(); 你得起好,如果你要改这个名字,还是得到多个地方改的。
链接:http://larabase.com/collection/5/post/145
一个类只能被实例化一次。最常见的场景就是一个数据库的链接,我们每次请求只需要连接一次,也就是说如果我们用来写类的话,只需要一次实例就够了。
应用中:首先私有化构造方法,然后创建一个静态方法,如果不存在这个类的实例属性,就创建一个,否则就取这个实例。
简单工厂模式:
本来我们要获取一个类的实例,需要用到new关键字。但是如果new 直接写到业务代码里,一个类在很多地方都实例化过,以后要是这个类出了什么问题,比如要改个名字(实际中,你更多的可能是修改构造函数方法),那么就尴尬了,需要改很多地方。
工厂模式,顾名思义,就是不用new来获得实例,而是把业务类放进一个工场类里,由工厂(类)『生产』出对应的实例。
实现代码:
simpleFactory.php
<?php namespace DesignPatterns\Creational\SimpleFactory; class SimpleFactory { public function createBicycle(): Bicycle { return new Bicycle(); } }
Bicyle.php
<?php namespace DesignPatterns\Creational\SimpleFactory; class Bicycle { public function driveTo(string $destination) { } }
使用:
$factory = new SimpleFactory(); $bicycle = $factory->createBicycle(); $bicycle->driveTo('Paris');
我们需要什么样的实例,就到工厂的实例方法里去拿。这里只定义了一个类的实例,你可以定义更多。
我们看到,业务代码里没有出现 new以及那个具体的业务类, 这样 业务类(class Bicycle)我们可以随便改,以后更新的时候只要在工厂类(class SimpleFactory)里修改一次,就可以一对多的在各处生效了。
但是,这个方法名字 $factory->createBicycle(); 你得起好,如果你要改这个名字,还是得到多个地方改的。
链接:http://larabase.com/collection/5/post/145
相关文章推荐
- 【设计模式】简单工厂模式——以一个简单的计算器为例
- 每天一个设计模式(4):简单工厂“模式”
- 设计模式之(2)简单工厂模式
- 设计模式之-简单工厂、工厂方法、抽象工厂
- [导入]C#设计模式之简单工厂篇
- 简单工厂设计模式-设计模式(1)
- 设计模式-简单工厂、工厂模式(转载)
- 设计模式---单件(C++版) 一个简单实例(避免用户忘记delete单件实例)
- 设计模式--创建模式--简单工厂
- 用 Delphi 学设计模式 之 简单工厂篇- -
- 设计模式 之 简单工厂
- C#设计模式之简单工厂篇
- 转:C#设计模式之简单工厂篇
- JAVA设计模式——简单工厂(Simple Factory)模式
- 设计模式(九)[简单工厂(Simple Factory)模式]
- Dot Net 设计模式—简单工厂
- C#设计模式学习笔记---简单工厂模式
- 设计模式之Factory1(简单工厂,工厂方法,抽象工厂的比较)
- 用JSP+Servlet+JavaBean模式实现一个简单的登录网页设计(JSP+Tomcat+MySQL)
- 简单工厂设计模式