php设计模式(八)原型模式

原型模式主要用于创建重复的对象;目的是使用 clone 对象来减少 new 对象的开销;如果某个场景需要多次实例化一个类;那就可以尝试用原型模式优化;在 php 中使用原型模式是很简单的;毕竟 php 是世界上最好的语言;我们只需要 clone 就行了;但是 clone 有一些问题;我们下面在代码中讲; 结构抽象的 __clone() 方法; 示...
阅读全文

php设计模式(七)使用反射来优化抽象工厂模式

简单工厂的核心是 switch 或者 if 判断;但是简单工厂配合抽象工厂的时候;工厂里面的每个用来实例化产品的方法都需要 switch ;这就显的重复了;这时候我们可以使用反射来优化; 结构多个 interface 或者 abstract 产品父类;多个实现 interface 或者继承 abstract 的具体产品类;1个工厂;工厂类里面有多个方法分...
阅读全文

php设计模式(六)使用简单工厂来优化抽象工厂模式

抽象工厂模式中每增加一类产品都要改动全部的工厂;这个工厂就是我们痛苦的源泉了;这时候可以使用简单工厂来优化抽象工厂; 结构多个 interface 或者 abstract 产品父类;多个实现 interface 或者继承 abstract 的具体产品类;1个工厂;工厂类里面有多个方法分别实例化不同的具体产品类; 示例产品部分跟抽象工厂是一样的;...
阅读全文

php设计模式(五)抽象工厂模式

工厂方法有个问题是每个工厂只生产一个产品;导致存在大量的工厂;类比我们现实中的工厂;生产牙刷造了一个牙刷厂;生成鞋刷又造了一个鞋刷厂;但是其实牙刷和鞋刷都属于刷子;这就是产品族的概念了;它们同属于一个产品族;我们只造一个刷子厂同时生产一个产品族下的牙刷和鞋刷即可; 应用场景要实例话的对象充满不确定性可能会改变的时候;要创建的对象的数目和类型是未知的;...
阅读全文

github定义项目语言

今个公司上线新功能加班了;回家的有点晚;设计模式系列今天这时间是不够写了;写篇 GitHub 的小技巧吧;因为很多时候开源的项目中会带前端资源;于是明明是世界上最好的语言的项目也会被标记为 JavaScript;比如说我这个 laravel 开发的项目就被误伤了;然鹅 GitHub 还不提供指定项目语言的功能;这让 PHPer 怎么忍;还好现在可以通过忽...
阅读全文

php设计模式(四)工厂方法模式

上篇文章我们讲过简单工厂是违反开放封闭原则的;而工厂方法模式就可以规避此问题;它需要定义工厂的接口;让工厂的子类来确定实例化哪一个具体的产品类;延迟了类的实例化; 应用场景要实例话的对象充满不确定性可能会改变的时候;要创建的对象的数目和类型是未知的; 结构1个 interface 或者 abstract 产品父类;多个实现 interface 或者继...
阅读全文

php设计模式(三)简单工厂模式

本来这篇文章早就写完了;最先准备用 IOS 和 Android 举例;但是后来考虑到工厂方法和抽象工厂模式;又用小米和华为重写了一遍;这样可以方便的扩充低配版的红米和荣耀;但还是觉得讲的不清楚;最后采用了程杰老师《大话设计模式》书中的加减乘除举例;把 C 的代码转化并加上自己的理解写成 PHP 代码;在此感谢程杰老师;反复写了3种示例终于把这篇文章定稿了;...
阅读全文

linux修改主机名

本来是在写设计模式文章的;想着把3中工厂模式一起写了;结果眼瞅着又到凌晨了;现在都该保温杯+枸杞养生了;还是别熬夜太晚了;但是如果不把我定的每周一篇文章的任务完成;还怎么实现我1个亿的小目标;于是赶紧凑了篇linux的小技巧;使用云主机的时候默认的主机名都比较长;阿里的尤为长;作为一个有强迫症的人来说;bash 这么长的地方都被这乱七八糟的字符占着很...
阅读全文

php设计模式(二)单例模式

应用场景:数据库连接这种比较耗费资源的操作;我们希望整个应用只实例化一个; 结构:4私1公;私有化构造方法: 防止使用 new 创建多个实例;私有化克隆方法: 防止 clone 多个实例;私有化重建方法: 防止反序列化私有化静态属性: 防止直接访问存储实例的属性 示例```php<?phpnamespace Baijunyao\Design...
阅读全文

php设计模式(一)序言

随着项目代码越来越庞大;维护的成本甚至比开发的成本还高;这时候最怕的一句话就是"需求又变了" ;为了应对各种变动;为了编写更高质量的代码;这就需要我们掌握设计模式;设计模式并不是被创造出来的;而是程序猿前辈们在开发过程中实验总结出来的;后来由GOF整理成《Design Patterns: Elements of Reusable ObjectOriented...
阅读全文