介绍
本篇文章为大家展示了PHP中有哪些设计模式,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
<强>单例设计模式强>
所谓单例模式,即在应用程序中最多只有该类的一个实例存在,一旦创建,就会一直存在于内存中!
单例设计模式常应用于数据库类设计,采用单例模式,只连接一次数据库,防止打开多个数据库连接。
一个单例类应具备以下特点:
单例类不能直接实例化创建,而是只能由类本身实例化,因此,要获得这样的限制效果,构造函数必须标记为私有的,从而防止类被实例化。
需要一个私有静态成员变量来保存类实例和公开一个能访问到实例的公开静态方法。
在PHP中,为了防止他人对单例类实例克隆,通常还为其提供一个空的私有<代码> __clone() 代码>方法。
单例模式的例子:
, PHP & lt; ? ,/* * *,Singleton of 数据库 */class 数据库 {//才能,need 我方表示歉意a static private variable 用store a Database 实例。 privatestatic 才能;美元实例; ,//才能,Mark as private 用prevent it 得到being 实例化。 privatefunction__construct才能() {才能 ,,,//Do 没什么。 ,,} , privatefunction__clone才能(), {才能 ,,,//Do 没什么。 ,,} , publicstatic 才能;functiongetInstance (), {才能 ,,,if (! (self:: $ instanceinstanceofself)), { ,,,,,self:: $ instance =, newself (); ,,,} , ,,,returnself:: $实例; ,,} } , a 美元;=数据库::getInstance (); b 美元;=数据库::getInstance (); ,//,真的 var_dump()美元a ===, b)美元;
<强>工厂设计模式强>
工厂设计模式常用于根据输入参数的不同或者应用程序配置的不同来创建一种专门用来实例化并返回其对应的类的实例。
我们举例子,假设矩形,圆都有同样的一个方法,那么我们用基类提供的API来创建实例时,通过传参数来自动创建对应的类的实例,他们都有获取周长和面积的功能。
, php & lt; ? , interfaceInterfaceShape { ,functiongetArea (); ,functiongetCircumference (); } ,/* * *,矩形 */class Rectangle  implementsInterfaceShape { private 才能;美元宽度; private 才能;美元高度; ,, publicfunction__construct才能(宽度、美元,美元的高度) {才能 ,,,这个→美元width =,美元宽度; ,,,这个→美元height =,美元高度; ,,} , publicfunctiongetArea才能(), {才能 ,,,return $ this→宽度*,$ this→高度; ,,} , publicfunctiongetCircumference才能() {才能 ,,,return 2, *, $ this→width +, 2, *, $ this→高度; ,,} } ,/* * *,圆形 */class Circle  implementsInterfaceShape { private 才能;美元半径; , function__construct才能(半径) {才能 ,,,这个→美元radius =,美元半径; ,,} , , publicfunctiongetArea才能(), {才能 ,,,return M_PI *,战俘($ this→半径,,2); ,,} , publicfunctiongetCircumference才能() {才能 ,,,return 2, *, M_PI *, $ this→半径; ,,} } ,/* * *,形状工厂类 */class FactoryShape {, publicstatic 才能;functioncreate () {才能 ,,,switch (func_num_args ()), { ,,,,,case1: ,,,,,return newCircle (func_get_arg (0)); ,,,,,例2: ,,,,,return newRectangle (func_get_arg (0), func_get_arg (1)); ,,,,,默认值: ,,,,,,,#,代码… ,,,,,,,休息; ,,,} ,,}, } , rect 美元;=FactoryShape::创建(5,,5);//,对象(矩形)# 1,(2),{,(“width":“Rectangle":私人]=祝辞,int (5), (“height":“Rectangle":私人]=祝辞,int (5),} 矩形美元var_dump (); echo “& lt; br>“; ,//,对象(圆)# 2,(1),{,(“radius":“Circle":私人]=祝辞,int (4),} $ circle =FactoryShape:创建(4); var_dump(圆);
<强>观察者设计模式强>
观察者模式是挺常见的一种设计模式,使用得当会给程序带来非常大的便利,使用得不当,会给后来人一种难以维护的想法。