工厂模式
来源:互联网 发布:淘宝付款了怎么改地址 编辑:程序博客网 时间:2024/05/17 23:40
工厂模式,我的理解是为了方便管理同一个类的实例。要创建多个类的实例的时候,每一次实例化都需要new创建,当需要修改类名的时候就很不方便,而工厂模式为此提供了便利,只需要修改一个地方即可同时修改多个实例;同时,可以让子类根据情况创建实例。
代码:
class Factory{ public static function createTest() { return new Test(); } public static function createKaka() { return new Kaka(); }}class Test{ public function index() { echo __METHOD__; }}class Kaka{ public function index() { echo __METHOD__; }}// 使用方法$test = Factory::createTest();$test->index();echo "\n";$kaka = Factory::createKaka();$kaka->index();
流程图:
==================== 更新 2017-01-19 ======================
这一两天再回看一下,发现上面的代码是硬代码,扩展性差,于是在此修改一下。也不是不知道上面代码的弊端,只是平时养成写维护性好的代码的习惯,写代码都是想到哪就写到哪,考虑的东西比较少,经验不足。以后还需多加练习养成好习惯。下面上代码
代码:
// 改进工厂模式 class Factory{ protected static $_class = array(); public static function createInstance($class, $params = '') { // 此处结合单例模式,避免类的多次实例化,节省系统资源 if( isset(self::$_class[strtolower($class)]) ) { return self::$_class[strtolower($class)]; } // 保存实例 self::$_class[strtolower($class)] = empty($params) ? new $class() : new $class($params); return self::$_class[strtolower($class)]; }}// 测试例一 class Test{ public function __construct($params = 'Test') { print_r($params); } public function index() { echo __METHOD__; }}// 测试例二class Kaka{ public function __construct($params = 'Kaka') { print_r($params); } public function index() { echo __METHOD__; }}// 使用方法 $test = Factory::createInstance('Test', 'abc');$test->index();echo "\n";$kaka = Factory::createInstance('Kaka', array('abc'));$kaka->index();echo "\n";$abc = Factory::createInstance('Kaka', array('bcd'));$abc->index();
0 0
- 工厂模式 -- 工厂方法
- 工厂模式 -- 抽象工厂
- 工厂模式-简单工厂
- 工厂模式-工厂方法
- 工厂模式:静态工厂
- 工厂模式-简单工厂
- 工厂模式-抽象工厂
- 工厂模式-工厂方法
- 工厂 > 工厂方法模式
- 工厂模式-静态工厂
- 工厂模式-抽象工厂
- 工厂模式
- 工厂模式
- 工厂模式
- 工厂模式
- 工厂模式
- 工厂模式
- 工厂模式
- 排序rrrrrrrrrrr
- IO流_异常的注意事项
- 【项目经验】——vs2012程序打包部署下载InstallShield2015LimitedEdition的两种解决方案
- 我的第一篇博客
- Gradle在Android中的简单使用
- 工厂模式
- ubuntu16.04安装搜狗拼音
- APUE-第二章学习-UNIX标准化及实现-习题
- Java开发实践 网络编程 学习、应用、总结
- HDU 1232 并查集 (入门)
- 爱德华兹的《立志》
- RDD & schema 创建dataFrame
- 文件操作(库函数、系统调用、有缓存,无缓存)
- Linux服务器后台继续执行程序tmux方法