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