标签:
<?php /** * 操作抽象类 */ abstract class op { public $op_num_1; public $op_num_2; abstract function get_result(); } /** * 执行具体运算的加法类 */ class op_add extends op { public function get_result() { echo $this->op_num_1 + $this->op_num_2,chr(10); } } /** * 执行具体运算的减法类 */ class op_subtract extends op { public function get_result() { echo $this->op_num_1 - $this->op_num_2,chr(10); } } /** * 创建执行具体运算的对象的抽象工厂类 */ abstract class op_factory { abstract function create_op(); } /** * 创建执行加法运算的对象的类 */ class op_add_factory extends op_factory { public function create_op() { return new op_add(); } } /** * 创建执行减法运算的对象的类 */ class op_subtract_factory extends op_factory { public function create_op() { return new op_subtract(); } } //通过加法工厂创建一个执行加法运算的对象 $op_add = new op_add_factory(); $op = $op_add->create_op(); //执行运算 $op->op_num_1 = 100; $op->op_num_2 = 50; $op->get_result();
/*
简单工厂模式中对象的创建逻辑在工厂类内部。如果新增某项功能, 需要添加功能实现类,修改工厂类内部的对象创建逻辑。这样违背了面向对象的“开放-封闭原则”。
工厂方法模式,将对象的创建逻辑延迟到工厂类的子类中。如果新增某项功能,它只需添加功能实现类,添加工厂方法子类用于创建新增的个功能实现类的对象。
但是具体调用哪个工厂子类来创建具体功能对象的逻辑,貌似交还给了客户端。
*/
工厂方法模式(factory method): 定义一个创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
标签:
原文地址:http://www.cnblogs.com/buexplain/p/4629933.html