时间:2021-07-01 10:21:17 帮助过:28人阅读
classClassName { publicstatic $_instance; privatefunction construct() { # code... } privatefunction clone() { # empty } publicstaticfunctionGetInstance() { if(!(self::$_instance instanceofself)) { self::$_instance =newself(); } returnself::$_instance; } publicfunctionSayHi() { echo "Hi boy!"; } } $App=ClassName::GetInstance(); $App->SayHi(); /** * * Output * * Hi boy! * */
简单工厂模式
当你有大量的实现同一接口的类的时候,在合适的时候实例化合适的类,如果把这些 new 分散到项目的各个角落,不仅会使业务逻辑变的混乱并且使得项目难以维护。这时候如果引进工厂模式的概念,就能很好的处理这个问题。我们还可以通过应用程序配置或者提供参数的形式让工厂类为我们返回合适的的实例。
工厂类,它把实例化类的过程放到各工厂类里头,专门用来创建其他类的对象。工厂模式往往配合接口一起使用,这样应用程序就不必要知道这些被实例化的类的具体细节,只要知道工厂返回的是支持某个接口的类可以很方便的使用了。下面简单举例说明下工厂类的使用。
interfaceProductInterface { publicfunction showProductInfo(); } classProductAimplementsProductInterface { function showProductInfo() { echo 'This is product A.'; } } classProductBimplementsProductInterface { function showProductInfo() { echo 'This is product B.'; } } classProductFactory { publicstaticfunction factory($ProductType) { $ProductType ='Product'. strtoupper($ProductType); if(class_exists($ProductType)) { returnnew $ProductType(); } else { thrownewException("Error Processing Request",1); } } } //这里需要一个产品型号为 A 的对象 $x =ProductFactory::factory('A'); $x -> showProductInfo(); //这里需要一个产品型号为 B 的对象 $o =ProductFactory::factory('B'); $o -> showProductInfo(); //都可以调用showProductInfo方法,因为都实现了接口 ProductInterface.
小结
模式就像是软件工程的基石脉络像大厦的设计图纸一样,这里接触了两种模式:单例模式和工程模式。单例类中存在一个静态变量保存着自身的一个实例,并且提供了获取这个静态变量的静态方法。单例类还应该把构造函数和clone函数标记为私有的,防止破换实例的唯一性。工厂模式根据传入的参数或程序的配置来创建不同的类型实例,工厂类返回的是对象,工厂类在多态性编程实践中是至关重要的。
以上就是PHP的单例模式和工厂模式用法详解的详细内容,更多请关注Gxl网其它相关文章!