php实现工厂模式
来源:互联网 发布:mac pro测评 编辑:程序博客网 时间:2024/05/21 19:41
设计模式-使用php实现工厂方法模式
【概要】
创建型模式
定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使用一个类的实例化延迟到其子类【GOF95】
抽象产品(Product)角色:具体产品对象共有的父类或接口
具体产品(Concrete Product)角色:实现抽象产品角色所定义的接口,并且工厂方法模式所创建的每一个对象都是某具体产品对象的实例
抽象工厂(Creator)角色:模式中任何创建对象的工厂类都要实现这个接口,它声明了工厂方法,该方法返回一个Product类型的对象。
Creator也可以定义一个工厂方法的缺省实现,它返回一个缺省的的ConcreteProduct对象
具体工厂(Concrete Creator)角色:实现抽象工厂接口,具体工厂角色与应用逻辑相关,由应用程序直接调用以创建产品对象。
【优缺点】
优点:工厂方法模式可以允许系统在不修改工厂角色的情况下引进新产品。
缺点:客户可能仅仅为了创建一个特定的ConcreteProduct对象,就不得不创建一个Creator子类
【适用性】
1、当一个类不知道它所必须创建的对象的类的时候
2、当一个类希望由它的子类来指定它所创建的对象的时候
3、当类将创建对象的职责委托给多个帮助子类的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候
【简单工厂模式】
从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。
【简单工厂模式php实例】
【概要】
创建型模式
定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使用一个类的实例化延迟到其子类【GOF95】
【结构图】
【主要角色】
抽象产品(Product)角色:具体产品对象共有的父类或接口
具体产品(Concrete Product)角色:实现抽象产品角色所定义的接口,并且工厂方法模式所创建的每一个对象都是某具体产品对象的实例
抽象工厂(Creator)角色:模式中任何创建对象的工厂类都要实现这个接口,它声明了工厂方法,该方法返回一个Product类型的对象。
Creator也可以定义一个工厂方法的缺省实现,它返回一个缺省的的ConcreteProduct对象
具体工厂(Concrete Creator)角色:实现抽象工厂接口,具体工厂角色与应用逻辑相关,由应用程序直接调用以创建产品对象。
【优缺点】
优点:工厂方法模式可以允许系统在不修改工厂角色的情况下引进新产品。
缺点:客户可能仅仅为了创建一个特定的ConcreteProduct对象,就不得不创建一个Creator子类
【适用性】
1、当一个类不知道它所必须创建的对象的类的时候
2、当一个类希望由它的子类来指定它所创建的对象的时候
3、当类将创建对象的职责委托给多个帮助子类的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候
【工厂模式php实例】
<?<span style="color: black; background-color: rgb(255, 255, 102);">php</span> /** * <span style="color: black; background-color: rgb(160, 255, 255);">工厂方法模式</span> * ------------- * @author zhaoxuejie <zxj198468@gmail.com> * @package design pattern * @version v1.0 2011-12-14 *///抽象产品interface Work {public function doWork(); }//具体产品实现class Student implements Work {function doWork(){echo "学生做作业!\n";}}class Teacher implements Work {function doWork(){echo "老师批改作业!\n";}}//抽象工厂interface WorkerFactory {public function getWorker();}//具体抽象工厂实现class StudentFactory {function getWorker(){return new Student();}}class TeacherFactory {function getWorker(){return new Teacher();}}//客户端class Client {static function main() {$s = new Student();$s->doWork();$t = new Teacher();$t->doWork();}}Client::main();?>
【简单工厂模式】
从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。
【简单工厂模式php实例】
<?<span style="color: black; background-color: rgb(255, 255, 102);">php</span> /** * 简单工厂模式 * ------------- * @author zhaoxuejie <zxj198468@gmail.com> * @package design pattern * @version v1.0 2011-12-14 */interface Comput {public function getResults();}//操作类class Operation {protected $Number_A = 0;protected $Number_B = 0;protected $Result = 0;//赋值function setNumber($Number_A, $Number_B){$this->Number_A = $Number_A;$this->Number_B = $Number_B;}//清零function clearResult(){$this->Result = 0;}}//加法class OperationAdd extends Operation implements Comput {function getResults(){return $this->Result = ($this->Number_A + $this->Number_B);}}//减法class OperationSub extends Operation implements Comput {function getResults(){return $this->Result = ($this->Number_A - $this->Number_B);}}//乘法class OperationMul extends Operation implements Comput {function getResults(){return $this->Result = ($this->Number_A * $this->Number_B);}}//除法class OperationDiv extends Operation implements Comput {function getResults(){if(intval($this->Number_B) == 0){return $this->Result = 'Error: Division by zero';}return $this->Result = ($this->Number_A / $this->Number_B);}}//工厂class OperationFactory {private static $obj;public static function CreateOperation($type){try { $error = "Please input the '+', '-', '*', '/' symbols of Math."; switch($type){case '+' :self::$obj = new OperationAdd();break;case '-' :self::$obj = new OperationSub();break;case '*' :self::$obj = new OperationMul();break;case '/' :self::$obj = new OperationDiv();break;default:throw new Exception($error);}return self::$obj;} catch (Exception $e) {echo 'Caught exception: ', $e->getMessage(), "\n";exit;}}}//工厂创建实例$obj = OperationFactory::CreateOperation('*');$obj->setNumber(3, 4);echo $obj->getResults();?>
0 0
- php实现工厂模式
- PHP实现 工厂模式
- php实现工厂模式
- PHP实现工厂模式
- php实现工厂模式
- 工厂模式之PHP实现
- php实现抽象工厂模式
- 简单工厂模式之php实现
- php、java实现工厂方法模式
- php,java实现抽象工厂模式
- PHP实现抽象工厂设计模式
- PHP设计模式笔记:使用PHP实现工厂模式
- 设计模式-使用php实现工厂方法模式
- 设计模式之工厂模式(PHP实现)
- PHP和golang实现设计模式-工厂方法模式
- PHP和golang实现设计模式-抽象工厂模式
- php设计模式之工厂模式(工厂模式实现计算器功能)
- php工厂模式
- php 简易分页代码
- GTK简单版计算器
- 经典SQL语句大全
- SQLiteDatabase 多线程数据库读写分析与优化
- 内网突破SSL嗅探的探究
- php实现工厂模式
- MYSQL手册 以及PHPINFO里面的设置
- 在android模拟器下显示jquery mobile的页面
- Java File
- 求质数1 C实现
- 我的学习之旅(7) build工具
- 实现表达式求值(c++实现)
- IOC
- 通过vnc 用电脑 控制 手机