新网创想网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
本篇内容介绍了“php常用的设计模式有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
成都创新互联2013年至今,是专业互联网技术服务公司,拥有项目网站设计、成都网站设计网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元振兴做网站,已为上家服务,为振兴各地企业和个人服务,联系电话:13518219792
1,含义
某个类只有一个实例,自动实例化并向整个系统提供这个类的实例。
即:应用程序只会有这个类的一个实例存在。
多用在数据库操作,线程池,缓存,打印机中。
2,特点
只有一个实例,必须有构造函数,标记为private
向其他成员提供访问这个实例的静态方法
必须自行创建这个实例,拥有一个保存类的实例的静态成员变量
3,代码
class SingleCase { private static $_instance; private function __construct() { echo 'i has been'; } public static function getInstance() { if(!isset(self::$_instance)) { self::$_instance = new self(); } return self::$_instance; } private function __clone() { } }
备注:存在难以调试,隐藏着依赖关系
1,含义
工厂模式是一个类,而这个类包含一些方法,这些方法的作用或者功能就是实例化对象
工厂模式通常用来返回符合类似接口的不同的类
2,特点
工厂模式一般有一个命名为Factory的静态方法
这个静态方法接收一个参数
这个静态方法根据参数,返回不同的对象实例
3,代码
class Factory { static public function getUser($type) { if ($type == 1) { return new A(); } return new B(); } } interface FetchName { public function getName() } class A implements FetchName { public function getName() } class B implements FetchName { public function getName() } //使用 $user = Factory::getUser(1); $user->getName();
备注:有啥用?
如果一个系统,很多地方用 new User() 这种方式。有一天 new User('A');增加个参数,所有地方都需要变更;
如果一个系统,使用工厂模式User::getObj('1'); 假如参数1返回new User()这个对象实例; 有一天new User() 增加个参数,我只需要改工厂中的类实例。
1,含义
观察者模式为您提供了避免组件之间紧密耦合的另一种方法
分为主题和观察者,都需要实现接口和方法
主题里面进行观察者注册,并设置一个方法,这个方法的作用是调用观察者的方法进行通知观察者
2,特点
针对接口编程,不针对实现编程
观察者模式定义对象的一对多依赖
当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新
3,代码
class Paper { private $myObj = []; public function register($sub) { $this->myObj[] = $sub; } public function setMessage(){ if ($this->myObj) { foreach ($this->myObj as $obj) { $obj->update(); } } } } interface Observerable{ public function update(); } class Subscriber implements Observerable{ public function update(){ echo "Callback\n"; } }
备注:
$paper = new Paper();
$paper->register(new Subscriber());
//$paper->register(new Subscriber1());
$paper->setMessage();
只要任何类注册,调用setMessage()方法。其他注册过的类都会收到update()方法的通知。
“php常用的设计模式有哪些”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!