php设计模式(四)工厂方法模式
上篇文章我们讲过简单工厂是违反开放封闭原则的;而工厂方法模式就可以规避此问题;它需要定义工厂的接口;让工厂的子类来确定实例化哪一个具体的产品类;延迟了类的实例化;
应用场景要实例化的对象充满不确定性可能会改变的时候;要创建的对象的数目和类型是未知的;
结构1个 interface 或者 abstract 产品父类;多个实现 interface 或者继承 abstract 的具体产品类;
1个 interface 或者 abstract 工厂父类;多个实现 interface 或者继承 abstract 的具体工厂类;
具体工厂类和具体产品类一一对应;在具体工厂类中实例化具体的产品类
示例要是感觉看起来有点懵咱用代码说话;抽象类和加减乘数这四个产品类是不用变的;Operation.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354<?phpnamespace Baijunyao\DesignPatterns\FactoryMet ...
php设计模式(三)简单工厂模式
本来这篇文章早就写完了;
最先准备用 IOS 和 Android 举例;但是后来考虑到工厂方法和抽象工厂模式;又用小米和华为重写了一遍;这样可以方便的扩充低配版的红米和荣耀;但还是觉得讲的不清楚;最后采用了程杰老师《大话设计模式》书中的加减乘除举例;把 C# 的代码转化并加上自己的理解写成 PHP 代码;在此感谢程杰老师;反复写了3种示例终于把这篇文章定稿了;
简单工厂并不属于23种设计模式;它的实现和它的名字气质很符;就是简单;但是它使用的比较多;当面对产品经理那句让人肝儿颤的”此处不要写死以后可能会改”的时候;以及”以后可能要增加**功能”的时候;那我们都可以先构思下是否适合简单工厂模式;先来说说应用场景;
应用场景在不确定有多少种操作的时候;比如说运算符号 + - * / ;
结构1个工厂;1个 interface 或者 abstract 产品父类;多个实现 interface 或者继承 abstract 的具体产品类;
示例写一个计算器;我们先用直观的但是并不优雅的方式来实现;Bad.php
1234567891011121314151617181920212223 ...
php设计模式(二)单例模式
应用场景:数据库连接这种比较耗费资源的操作;我们希望整个应用只实例化一个;
结构:4私1公;私有化构造方法: 防止使用 new 创建多个实例;私有化克隆方法: 防止 clone 多个实例;私有化重建方法: 防止反序列化私有化静态属性: 防止直接访问存储实例的属性
示例123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104<?phpnamespace Baijunyao\DesignPatterns\Singleton;/** * 普通类 * * Class Db1 * @package Baijunyao\DesignPatterns\Singleton */class Db1{ public static $ins ...
PHP设计模式(一)序言
随着项目代码越来越庞大;维护的成本甚至比开发的成本还高;
这时候最怕的一句话就是”需求又变了” ;
为了应对各种变动;
为了编写更高质量的代码;
这就需要我们掌握设计模式;
设计模式并不是被创造出来的;
而是程序猿前辈们在开发过程中实验总结出来的;
后来由GOF整理成《Design Patterns: Elements of Reusable Object-Oriented Software》一书;
GOF(Gang of Four) 是 4位作者的合称;
一般叫他们 4人帮 ;
他们把设计模式划分为3类总共23种;
创建型:单例、抽象工厂、建造者、工厂、原型;
结构型:适配器、桥接、装饰、组合、外观、享元、代理;
行为型:模版方法、命令、迭代器、观察者、中介者、备忘录、解释器、状态、策略、职责链、访问者;
设计模式的宗旨是重用;
目的是建立对象间的关联;
提供了让代码之间松耦合的各种方案;
它有两个原则:
按接口编程而不是按实现来编程
优先使用组合而不是继承
这两句话不太懂没关系;
有印象就行了;
我们后续从代码中理解;
为了写好这个系列;
我读了3本设计模式的书以及网上大 ...
Hello World
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.
Quick StartCreate a new post1$ hexo new "My New Post"
More info: Writing
Run server1$ hexo server
More info: Server
Generate static files1$ hexo generate
More info: Generating
Deploy to remote sites1$ hexo deploy
More info: Deployment