工厂模式

概念 工厂模式是我们最常用的实例化对象模式,是用工厂方法代替new操作的一种模式。 好处 使用工厂模式的好处是,如果你想要更改所实例化的类名等,则只需要更改该工厂方法内容即可,不需要逐一寻找代码中具体实例化的地方(new 处)修改了。为系统结构提供灵活的动态扩展机制,减少了耦合。 分类 简单工厂模式 工厂方法模式 抽象工厂模式 简单工厂模式 简单工厂模式又称静态工厂模式,之所以可以这么说,是因为简单工厂模式是通过一个静态方法来创建对象的 <?php class DbMysql { public function conn() { echo "连接MySQL"; } } class DbSqlite { public function conn() { echo "连接SQLite"; } } class DbFactory { public static function createIns($type) { switch ($type) { case 'mysql': return DbMysql(); break; case 'sqlite': return new DbSqlite(); break; default: throw new ErrorException('类型错误'); } } } $mysql = DbFactory::createIns('mysql'); $mysql->conn(); $sqlite = DbFactory::createIns('sqlite'); $sqlite->conn(); 工厂方法模式...

March 22, 2022 · 2 min · ZhaoGuibin

单例模式

概念 是一种类的设计只会最多产生一个对象的设计思想 作用 php的应用主要在于数据库应用,所以一个应用中会存在大量的数据库操作,使用单例模式,则可以避免大量的new操作消耗的资源。 如果系统中需要有一个类来全局控制某些配置信息,那么使用单例模式可以很方便的实现。 再一次页面请求中,便于进行调试,因为所有的代码都会集中在一个类里面,我们可以在类中设置钩子,输出日志,从而避免到处var_dump,echo。 应用场景 数据库连接,缓存操作,分布式储存 单例模式的要点 构造函数需要标记为private(访问控制:防止外部代码使用new操作符创建对象),单例类不能在其他类中实例化,只能被其自身实例化。 拥有一个保存类的实例的静态成员变量。 拥有一个访问这个实例的公共的静态方法(常用getInstance()方法进行实例化单例类,通过instanceof操作符可以检测到类是否已经被实例化) 简称 三私一公: 私有化构造方法:不让在外部产生多个对象 私有化克隆方法:不允许对象被克隆产生新对象 私有化静态属性:运行进入类内部产生对象 公有化静态方法:保存已经产生的对象 <?php //单例 class Uni{ //创建静态私有的变量保存该类对象 static private $instance; //参数 private $config; //防止直接创建对象 private function __construct($config){ $this -> config = $config; echo "我被实例化了"; } //防止克隆对象 private function __clone(){ } static public function getInstance($config){ //判断$instance是否是Uni的对象 //没有则创建 if (!self::$instance instanceof self) { self::$instance = new self($config); } return self::$instance; } public function getName(){ echo $this -> config; } } $db1 = Uni::getInstance(1); $db1 -> getName(); echo "<br>"; $db2 = Uni::getInstance(4); $db2 -> getName(); /** *运行结果: *我被实例化了1 *1 *$db1创建对象后,参数是1 *$db2没有创建对象,而是直接使用$instance保存的唯一对象,所以输出的参数并没有变为4; */

March 22, 2022 · 1 min · ZhaoGuibin

什么是设计模式

什么是设计模式 设计模式是一套被反复使用、容易被他人理解的、可靠的代码设计经验的总结。 那么我们常说的架构、框架和设计模式有什么关系呢? 架构是一套体系结构,是项目的整体解决方案; 框架是可供复用的半成品软件,是具体程序代码。 架构一般会涉及到采用什么样的框架来加速和优化某部分问题的解决,而好的框架代码里合理使用了很多设计模式。 比如:laravel框架中就使用到了很多的设计模式。其中包括单例模式,门面模式,注册树模式(DI/IOC),适配器模式,观察者模式等多种设计模式。 设计模式的目的是为了更好的代码重用性,可读性,可靠性,可维护性。 设计模式的作用 设计模式能解决: 替换杂乱无章的代码,形成良好的代码风格 代码易读,工程师们都能很容易理解 增加新功能时不用修改接口,可扩展性强 稳定性好,一般不会出现未知的问题 设计模式不能解决: 设计模式是用来组织你的代码的模板,而不是直接调用的库 设计模式并非最高效,但是代码的可读性和可维护性更重要 不要一味追求并套用设计模式,重构时多考虑 设计模式–六大原则 单一职责原则 定义 不要存在多于一个导致类变更的原因。既一个类只负责一项职责。 场景 类T负责两个不同的职责;职责P1,职责P2,当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常的职责P2功能发生故障。 <?php class Animal { public function bre($animal) { echo $animal."呼吸空气"; } } class Program { public function main() { $animal = new Animal(); $animal->bre('猫'); $animal->bre('狗'); $animal->bre('鱼'); } } 修正 遵循单一职责原则。分别建立两个类T1、T2,使T1完成职责P1功能,T2完成职责P2功能。这样,当修改类T1时,不会使职责P2发生故障风险;同理,当修改T2时,也不会使职责P1发生故障风险。 <?php class Ter { public function bre($animal) { echo $animal."呼吸空气"; } } class Aqu { public function bre($animal) { echo $animal....

March 21, 2022 · 4 min · ZhaoGuibin