本系列文章来总结一下设计模式在PHP中的应用,这是第一篇创建型模式之单例模式。
一、设计模式简介
首先我们来认识一下什么是设计模式:
设计模式是一套被反复使用、容易被他人理解的、可靠的代码设计经验的总结。
设计模式不是Java的专利,我们用面向对象的方法在PHP里也能很好的使用23种设计模式。
那么我们常说的架构、框架和设计模式有什么关系呢?
架构是一套体系结构,是项目的整体解决方案;框架是可供复用的半成品软件,是具体程序代码。架构一般会涉及到采用什么样的框架来加速和优化某部分问题的解决,而好的框架代码里合理使用了很多设计模式。
二、提炼设计模式的几个原则:
开闭原则:模块应对扩展开放,而对修改关闭。
里氏代换原则:如果调用的是父类的话,那么换成子类也完全可以运行。
依赖倒转原则:抽象不依赖细节,面向接口编程,传递参数尽量引用层次高的类。
接口隔离原则:每一个接口只负责一种角色。
合成/聚合复用原则:要尽量使用合成/聚合,不要滥用继承。
三、设计模式的功用?
设计模式能解决
替换杂乱无章的代码,形成良好的代码风格
代码易读,工程师们都能很容易理解
增加新功能时不用修改接口,可扩展性强
稳定性好,一般不会出现未知的问题
设计模式不能解决:
设计模式是用来组织你的代码的模板,而不是直接调用的库;
设计模式并非最高效,但是代码的可读性和可维护性更重要;
不要一味追求并套用设计模式,重构时多考虑;
四、设计模式分类
1、创建型模式:
单例模式、工厂模式(简单工厂、工厂方法、抽象工厂)、创建者模式、原型模式。
2、结构型模式:
适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。
3、行为型模式:
模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式。
五、创建型设计模式
1、单例模式
目的:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
应用场景:数据库连接、缓存操作、分布式存储。
/** * 单例模式 */ class DbConn { private static $_instance = null; protected static $_counter = 0; protected $_db; //私有化构造函数,不允许外部创建实例 private function __construct() { self::$_counter += 1; } public function getInstance() { if (self::$_instance == null) { self::$_instance = new DbConn(); } return self::$_instance; } public function connect() { echo "connected: ".(self::$_counter)."n"; return $this->_db; } } /* * 不使用单例模式时,删除构造函数的private后再测试,第二次调用构造函数后,_counter变成2 */ // $conn = new DbConn(); // $conn->connect(); // $conn = new DbConn(); // $conn->connect(); //使用单例模式后不能直接new对象,必须调用getInstance获取 $conn = DbConn::getInstance(); $db = $conn->connect(); //第二次调用是同一个实例,_counter还是1 $conn = DbConn::getInstance(); $db = $conn->connect();
特别说明:这里getInstance里有if判断然后再生成对象,在多线程语言里是会有并发问题的。例如java的解决方案有二个,给方法加上synchronized关键词变成同步,或者把_instanc的初始化提前放到类成员变量定义时,但是这2种方式php都不支持。不过因为php不支持多线程所以不需要考虑这个问题了。
小伙伴们是否对php设计模式的单例模式有所了解了呢?下一篇文章我们来介绍下工厂模式。
本文向大家介绍浅析php工厂模式,包括了浅析php工厂模式的使用技巧和注意事项,需要的朋友参考一下 本系列文章来总结一下设计模式在PHP中的应用,这是第二篇创建型模式之工厂模式。 设计模式的一般介绍在第一篇文章讲了,这里就不重复。 工厂模式 实现:定义一个用于创建对象的接口,让子类决定实例化哪一个类。 应用场景:众多子类并且会扩充、创建方法比较复杂。 工厂模式分为三种:简单工厂、工厂方法、抽象工厂
本文向大家介绍php单例模式实现方法分析,包括了php单例模式实现方法分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php单例模式实现方法。分享给大家供大家参考。具体如下: 希望本文所述对大家的php程序设计有所帮助。
本文向大家介绍浅析.net简单工厂模式,包括了浅析.net简单工厂模式的使用技巧和注意事项,需要的朋友参考一下 编程时一门技术,更是一门艺术 简单工厂模式利用面向对象方式通过继承、封装、多态把程序的耦合度降低,设计模式使得程序更加灵活,容易修改,易于复用。 下面是服务器计算器代码: 基本验证没加,学习练习的同学可以自己加上 28种设计模式后续更新 本文就是.net设计模式中的简单工厂模式的内容了,
本文向大家介绍php单态设计模式(单例模式)实例,包括了php单态设计模式(单例模式)实例的使用技巧和注意事项,需要的朋友参考一下 单态设计模式也叫单例模式: 1.单态设计模式含义: 单态模式的主要作用是保证在面向对象编程设计中,一个类只能有一个实例对象存在。作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统全局地提供这个实例。它不会创建实例副本,而是会向单例类内部存
本文向大家介绍php单例模式示例分享,包括了php单例模式示例分享的使用技巧和注意事项,需要的朋友参考一下 单例模式主要使用于数据库的连接, 确保数据库一个类只有一个实例, 并且向整个系统提供这个实例。从而避免new操作消耗资源, 同时避免数据库出现too many connection信息. 要点有三个: 1. 必须只有一个实例。 2. 必须自动创建这个实例。 3. 必须向整个系统提供这个实例。
本文向大家介绍Python单例模式实例分析,包括了Python单例模式实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python单例模式的使用方法。分享给大家供大家参考。具体如下: 方法一 1.禁用__init__方法,不能直接创建对象。 2.__instance,单例对象私有化。 3.@staticmethod,静态方法,通过类名直接调用。 4.__lock,代码锁。 5.继承