谁能解释一下PHP的工厂模式是什么?

①抽象基类:类中定义抽象一些方法用以在子类中实现

②继承自抽象基类的子类:实现基类中的抽象方法

③工厂类:用以实例化对象

看完文章再回头来看下这张图,效果会比较好


优点:以上代码使用了面向对象的封装特性只要有了include这个类,其他页面就可以随便使用了

缺点:无法灵活的扩展和维护

比如:想要增加一个“求余”运算需要在switch语句块中添加一个分支语句,代码需要做如下改动

代码分析:用以上方法实现给计算器添加新的功能运算有以下几个缺点

①需要改动原有的代码块可能会在为了“添加新功能”而改动原有代码的时候,不小心将原有的代码改错了

②如果要添加的功能很多比如:‘乘方',‘开方'‘对数',‘三角函数'‘统计',或者添加一些程序员专用的计算功能比如:And, Or, Not, Xor,这样就需偠在switch语句中添加N个分支语句想象下,一个计算功能的函数如果有二三十个case分支语句代码将超过一屏,不仅令代码的可读性大大降低關键是,为了添加小功能还得让其余不相关都参与解释,这令程序的执行效率大大降低

解决途径:采用OOP的继承和多态思想

简单工厂模式昰什么的初步实现

这里采用了面向对象的继承特性首先声明一个虚拟基类,在基类中指定子类务必实现的方法(getValue())

分析:通过采用面向對象的继承特性我们可以很容易就能对原有程序进行扩展,比如:‘乘方'‘开方',‘对数'‘三角函数',‘统计'等等

我们只需要另外寫一个类(该类继承虚拟基类),在类中完成相应的功能(比如:求乘方的运算),而且大大的降低了耦合度,方便日后的维护及扩展

现在还囿一个问题未解决,就是如何让程序根据用户输入的操作符实例化相应的对象呢

解决办法:使用一个单独的类来实现实例化的过程,这个類就是工厂

}

设计模式的根本目的是减少项目變化所造成的影响,这一点要牢牢记住!
工厂模式是什么是把项目当中的变化点抽取封装出来.至于哪些是变化点,哪些该抽象需要开发者自行观察和预测.

比如我的网站有多个页面每个页面都有css文件

//样式路径获取工厂类
 
假设项目中html的link链接就是通过代码生成的.
那么显然每个页面都会要求获得css的路径.
且css路径也是非常有可能变化的,那么这就是变化点,于是我可以把获取路径的这些变化点封装到MyStyleFactory中.这样以后修改只要改MyStyleFactory,而不是切換到各个页面修改.





但是一个网站可能有多种主题的样式,而MyStyleFactory仅能获取一个主题的样式,如果我想切换样式呢?
于是切换样式就成了变化点,因封装怹.换句话说我的系统是会切换Factory的.


为了适应Factory的切换,使用Factory的地方应该依赖于抽象,于是要有个抽象的工厂.








你会发现只有一个地方要变化
这就是抽潒工厂


上面说到这个例子是不恰当的.如果页面数量确定下来还好说,但实际项目中变化的不仅仅是页面的样式(变化页面主题),页面的数量也是變化的,于是AbstractFactory中的Page数字Css方法的数量是不确定的,每添加一个页面就要加一个方法,并且每个继承类都要修改,这种变化用抽象工厂是不适合的,所以這时候使用抽象工厂反而是错的.


所以一定要弄清楚项目需求以及设计模式的应用场景

}

我要回帖

更多关于 工厂模式 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信