1. 首先就是使用简单工厂模式可以根据不同的参数去实例化不同的类,而不是new方法去实例化每一个不同的类,这样给使用者这样更好管理。
2. 其次就是如果要实例化的类在多个文件中用到,当我们修改类名称的时候只需要去修改工厂类就行,而不必修改每一个实例化该类的文件(有点鸡肋的感觉,这种情况很少见)。
看一个最经典也最好理解的一个简单工厂模式的例子,运算符操作:
简单工厂模式的工厂类一般是使用静态方法,通过接受不同的参数来返回不同的对象实例,代码是写死的,因此不修改代码就不能进行扩展,违反了OCP(对扩展开发,对修改关闭原则)。
numa = $a; $this->numb = $b; } //静态方法,通过接受不同的参数生成不同的对象实例 public static function create($operation,$a,$b){ switch ($operation) { case '+':return new Operationadd($a,$b);break; case '-':return new Operationminus($a,$b);break; default:# code...break; } }}/************************************************//*加法*/class Operationadd extends Operation{ public function doing(){ return $this->numa + $this->numb; }}/*减法*/class Operationminus extends Operation{ public function doing(){ return $this->numa - $this->numb; }}$test = Operation::create('+',2,56);echo $test->doing();
工厂模式
之前我在项目中只接触到了简单工厂模式,为了写这篇文章我特意查了资料,发现工厂模式有三种:简单工厂模式(又叫静态工厂模式)、工厂模式、抽象工厂模式,看了工厂模式之后感觉他的用处好像不是很大,只是符合了OCP原则,在有新的符合抽象产品接口和抽象工厂接口的产品时我们只需要去扩展一种具体的产品和工厂就行,而不必去修改原有代码,总结下工厂模式的优缺点:
优点:首先就是符合了OCP原则,扩展性提高了;其次就是可维护性提高了,在修改一个具体工厂角色时只要找到自己的工厂角色就行,不用担心影响到其他工厂角色的实现。
缺点:代码多了,每种产品都要一个产品类和一个工厂类。这个缺点可以用简单工厂模式和工厂模式的结合来实现,将类似的产品类的工厂类合并为一个。
runing();
工厂类自己没在具体项目中用过,说起来总感觉有点怪怪的感觉,要是有什么不对的、不恰当的地方,还望各位高手前辈们指出。
send Me~
以上就介绍了PHP设计模式(二),包括了方面的内容,希望对PHP教学有兴趣的朋友有所帮助。