设计模式有好多种,我们先列举出来:单例模式,工厂模式,观察者模式,策略模式。
记这些模式我们不能死记硬背,需要这些设计模式了解,才能懂得如何使用。
1. 单例模式
从字面意思,就是一个实例模式,也就是说在整个系统运行中,保证一个类,只实例化一次,每次使用这个类的时候,不会再创建新的类。
优势:主要是减少资源开销,每次实例化都会增加资源消耗,如果只实例化一次,那么就降低了资源消耗。如果这个实例里有数据库连接,从而减少数据库连接次数。
简单代码实现:
class test{ private static $_instance=false; public function __construct(){ echo '实例化了'; } public static function getInstance(){ if(self::$_instance===false){ self::$_instance = new self(); } return self::$_instance; } } $test = test::getInstance(); $test = test::getInstance(); $test = test::getInstance();
2. 工厂模式
工厂即是批量生产的地方,如何批量生产?根据不同的条件,批量生产类返回给你。
实际上,工厂模式就是根据你的条件返回不同的类,去实现你要的功能。
网上大多数例子都举的是:一个计算器的抽象类,继承这个抽象类,实现加减乘除几种类,然后根据不同的符号,返回不同的计算器类,去实现针对不同符号的计算。
这里我就不举这个例子了,我另外创建一个其他例子去帮助大家理解工厂模式:
class ClassA{ function dothing(){ echo 'A'; } } class ClassB{ function dothing(){ echo 'B'; } } class ClassC{ function dothing(){ echo 'C'; } } class test { private $obj; public function __construct(){ } public function getObj($type){ switch($type){ case 'A': $obj = new ClassA(); break; case 'B': $obj = new ClassB(); break; case 'C': $obj = new ClassC(); break; } return $obj; } } $type = 'A'; $obj = new test($type); $obj->dothing();
工厂模式主要是用户同类型的类工作,按需分配,需要保证类里面的方法一致,所以使用抽象类,让所有类继承它,并实现响应的方法,保证方法统一。
3. 观察者模式