
设计模式
李士令
码农,进阶程序员阶段。
我们都应该相信自己的灵魂是自由的,可以翱翔天空
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
简单工厂模式
简单工厂模式,严格来说不属于设计模式,更像一种编码风格。通过在工厂类中进行判断,一般通过if-elseif 或者 switch,然后创建需要的功能类。上代码:<?phpinterface People { public function work();}class Teacher implements People{ public function work() {原创 2017-03-19 22:15:15 · 208 阅读 · 0 评论 -
模板方法模式
模板方法模式,定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。相当于在父类中定义了操作规则,子类都按照这个规则去处理自己的业务。比如,项目需要异步处理,从消息队列里获取数据后进行更新操作,那是不是总结起来就是获取数据和更新数据。<?phpabstract class Base { public function execute() { $data = $this->expor原创 2017-04-01 17:08:42 · 223 阅读 · 0 评论 -
组合模式
组合模式,别名合成模式。当对象或系统出现部分与整体的层次结构,类似于树状关系时,可以考虑用组合模式。举个栗子:<?phpabstract class Organization { protected $name; protected $child; public function __construct($name) { $this->name = $name; }原创 2017-04-10 19:58:48 · 236 阅读 · 0 评论 -
原型模式
通过“复制”一个已经存在的实例来返回新的实例,而不是新建实例。PHP需要注意深浅复制问题。PHP对于对象属性默认是浅复制。举个栗子,网站上下载电子书。电子书好比是一个对象,大家需要阅读只需下载下来(复制)即可,不需要重复去生成电子书,很方便。此处应该有UML图,时间关系,后期补上...<?phpinterface website{ public function copy();原创 2017-03-31 16:38:24 · 210 阅读 · 0 评论 -
代理模式
代理模式,提供一种代理以控制对这个对象的访问。代理类成为实际调用对象的中间件,可以控制对实际调用对象的访问权限。比如支付宝代交水电费,滴滴软件代叫出租车。<?phpinterface go{ public function takeCar();}class BeijingTaxi implements go{ public function drive(原创 2017-03-31 15:05:40 · 244 阅读 · 0 评论 -
门面模式
门面模式,别名外观模式。为客户端提供一个统一的接口,客户端不需要知晓接口调用的具体类,甚至可以封装成静态调用方式,参数也是自由传递。原创 2017-03-31 10:25:04 · 343 阅读 · 0 评论 -
装饰者模式
装饰者模式可以动态的给一个对象添加一些额外的职责,非常灵活进行组合。装饰者模式也可以解决继承依赖的难题,比如在一个项目中,反复使用继承会造成层级结构太大,有很多父类的属性和方法根本用不上,后期需求改动,想修改也难于上青天。这时候可以使用装饰者模式。不过装饰者模式会造成过多子类的问题。原创 2017-03-30 19:35:02 · 205 阅读 · 0 评论 -
观察者模式
观察者模式,它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。当具体主题的内部状态改变时,给所有登记过的观察者发出通知。观察者也称为发布-订阅(Publish-Subscribe)模式代码如下:<?phpinterface Subject{ public function attach($params); public原创 2017-03-21 07:22:28 · 273 阅读 · 0 评论 -
策略模式
策略模式,定义若干策略类,客户端根据具体需求去使用相应的策略类。使用场景如不同类型商品的打折力度、不同级别会员的优惠幅度、员工奖金等。上代码:<?phpinterface Pay{ public function payMoney();}class WxPay implements Pay{ public function payMoney() { echo 'Use原创 2017-03-20 12:41:58 · 211 阅读 · 0 评论 -
单例模式
单例模式,一个类只被实例化一次。类中用静态属性和静态方法去判断唯一性,要注意clone的问题。Java中还要注意多线程同时实例化对象的坑,Php基本不存在这个问题,就不予考虑了。不过可以通过以下两个方案解决:1. 急切创建实例。静态属性直接赋值单例对象,这样类调用时已经存在了对象。2. 锁机制。实例化对象时加锁,完成后解锁。多线程中不会出现生成两个对象的坑了。上代码:<?p原创 2017-03-19 23:42:02 · 208 阅读 · 0 评论 -
抽象工厂
抽象工厂,提供一个创建一系列相关或相互依赖对象的接口。原创 2017-03-19 23:21:10 · 259 阅读 · 0 评论 -
工厂方法
相比简单工厂模式,做了进一步的抽象为接口或抽象类,给所有的功能类添加了对应的工厂类,一 一在工厂类中实例对应的功能类,遵循了开放封闭原则(对扩展开放,对修改封闭)上代码:<?phpinterface People{ public function work();}class Teacher implements People{ public function work() {原创 2017-03-19 22:44:31 · 259 阅读 · 0 评论 -
建造者模式
建造者模式,先来看下定义:是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。简单地说,需要创建的对象都有自己的功能,但是创建方式是一样的,那么可以用建造者类来负责功能对象的创建。类图如下:Builder模式中主要角色抽象建造者(Builder)角色:定义抽象接口,规范产品各个部分的建造,必须包括建造方法和返回方法。具体建造者(Concre原创 2017-04-03 17:17:54 · 208 阅读 · 0 评论