
设计模式
战国墨竹
这个作者很懒,什么都没留下…
展开
-
PHP设计模式--简单工厂
设计模式是进阶架构师必须要了解的一个知识体系,作为初学者其实2017年考架构师的时候就已经了解过一些设计模式的概念了,可是由于缺少经验不能够很好的和代码相结合,所以利用2018年之初结合代码好好的体会一下。个人感觉在网上看过很多资料之后,也感谢网上众多的分享者,对于设计模式的学习一定要了解清楚逻辑之后自己在脑子里想一遍,然后建立属于自己的场景试着码一遍。下面是自己的一些体会了解做个记录(了解思想为...转载 2018-04-18 09:02:07 · 105 阅读 · 0 评论 -
PHP设计模式--职责链模式
职责链模式(Responsibility)属于行为型模型,还是比较好理解,就是对于某个请求,一级不能处理就转到二级处理。 生活中用的最普遍的例子就是,公司申请拨款,一万左右的经费,经理可以批准通过,但是达到十万左右的经理就没有权限审批了,需要转交到总监那里去审批,这就是一条职责链。 这样系统可以在不影响客户端的情况下,对责任进行动态的分配。<?php // 请求类 Class ...转载 2018-04-20 10:37:47 · 122 阅读 · 0 评论 -
PHP设计模式--命令模式
命令模式(Command)是一种非常常用的设计模式, 其本质是对命令进行封装,将发出命令的责任和执行命令的责任分割开,降低对象之间的耦合度,新的命令可以很容易地加入到系统中。 命令模式之所以常用的优势就在于可以将请求发送者和接收者完全解耦,而系统解耦是系统的终极目标。 解耦之后调用某些对象的某些方法,并不知道请求的接收者是谁。 物联网环境下人工智能发展迅速,现在的智能灯,只需要连接手机就可以轻松...转载 2018-04-19 14:04:08 · 143 阅读 · 0 评论 -
PHP设计模式--解释器模式
解释器模式(Interpreter)理解起来挺难的,但是这种设计模式不常用。 适用于文法比较简单的程序,一旦文法复杂度大了,后期难以维护。 定义一个语言的文法,并且建立一个解释器来解释该语言中的句子,每个文法可以表示成一个类,只需要扩展文法类,通过统一的解释器类进行调用解释。 比方说现在有一个解释器,可以把字母解释成一个完整的单词,如果需要扩展,可以创建第二个文法类,解释成其他的意思(如中文)。...转载 2018-04-19 14:04:01 · 453 阅读 · 0 评论 -
PHP设计模式--迭代器模式
迭代器模式(Iterator)是一种对象行为型模式,使用频率很高。 最常见的使用就是通过遍历功能把数据从聚合对象中分离出来。 迭代器也是操作聚合对象的基本手段,包括的方法有:获取第一个元素的First(),访问下一个元素的Next(),判断是否还有下一个元素的IsExist(),获取当前元素的currentItem()。 有点类似于把数组转变成单个字符串的过程。 包含一个抽象迭代器和一个具体迭代...转载 2018-04-19 14:03:56 · 205 阅读 · 0 评论 -
PHP设计模式--中介者模式
中介者模式(Mediator)属于行为型模式,从字面意思理解起来也不难,相信中介每个人都会接触到,比如租房会碰到房产中介,买车会碰到汽车中介,包括我们经常用的淘宝也类似一个大中介。 那么所谓的中介就是提供一个第三方对象,使交互趋于简单化。 用最简单的例子去理解,就是两个对象想要交互,但是两者自己不去直接发生交互,而是通过中介者将两者的进行交互。 如下模拟房产中介交互的过程:买主需要一个两室一厅的...转载 2018-04-19 14:03:51 · 221 阅读 · 0 评论 -
PHP设计模式--备忘录模式
备忘录模式(Memento)是行为模式之一。 概念:在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 从命名基本上可以了解到这个模式的作用,我们都知道无论是以前的手机还是现在的手机,都会有备忘录这个功能,备忘录的作用是什么呢? 防止人脑记不住的时候,记录到备忘录里面,可以随时拿出来提醒自己,就像是日志文件一样。 例如:作为开发人...转载 2018-04-19 14:03:46 · 118 阅读 · 0 评论 -
PHP设计模式--观察者模式
观察者模式(Observer)是一种使用非常多的行为型模式,内部主要有观察者和被观察者(目标)两个对象,观察者根据目标的变化而相应的变化。 提到这种模式,让我想到了近两年很火的几款游戏,比如:王者荣耀5V5对战,当你的队友被攻击的时候,仔细的人会发现你的队友小头像会不断变红,直到变成灰色倒计时,最后会有一个广播你的队友被杀的信息。 在这个过程中,被攻击的队友是目标,你和其它队友是观察者,接收到...转载 2018-04-19 14:03:40 · 113 阅读 · 0 评论 -
PHP设计模式--状态模式
今天学习的是状态模式(State),一种行为型模式。 状态模式从代码结构上分析有点和职责链模式相似,每个状态有自己的上限,一旦超出会成为另一种状态。 状态模式的定义:允许一个对象在其内部状态改变时改变它的行为。 而状态模式就是分离对象的状态,封装到专门的状态类中。 优点是,把各个状态分离开,便于横向扩展,灵活性高。 如果光学习概念其实比较抽象,下面举一个实用的小例子: 所有做过互联网商城的公司都知...转载 2018-04-19 14:03:11 · 697 阅读 · 0 评论 -
PHP设计模式--策略模式
策略模式(Strategy)是一种行为型模式。 百度定义:策略模式是指对一系列的算法定义,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。 理解起来并不是很难,策略模式是一种算法的灵活实现,通俗点讲,就是一个功能有多条途径去实现, 拥有一个抽象策略类,具体策略的灵活性就体现在,出现新的算法策略时只需要添加一个具体算法策略就行。 举个简单的例子,我们都...转载 2018-04-19 14:03:00 · 179 阅读 · 0 评论 -
PHP设计模式--模板方法模式
模板方法(Template)模式是一种结构很简单的行为型模式, 百度定义:一个操作中算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 特定:灵活度高,可扩展性强。 通俗来说:在抽象父类中定义一个模板方法的方法,通过子类的覆盖使得相同算法框架可以有不同的执行结果 比如某餐厅有A,B两个套餐,里面包含的饮料和食物不同,则可以用代码表示如下...转载 2018-04-19 14:02:43 · 557 阅读 · 0 评论 -
PHP设计模式--代理模式
最后学习的一种结构型模式是 代理模式(Proxy)。 主要用于客户端无法直接访问一个对象的时候就可以通过代理模式来间接访问对象。 这种模式也比较常用,代码的结构和外观模式有些相似,也挺容易混淆的。 在网上查了学习了很多的资料,去对比了两者的特点,总结一下: 外观模式主要是描述类与类的关系,提供一个统一的外观接口类去实现多个类的方法。 代理模式更多的是提供一个代理类去完成子类内部的所有方法,就像客...转载 2018-04-20 10:37:43 · 278 阅读 · 0 评论 -
PHP设计模式--享元模式
享元模式(Flyweight)属于结构型模式之一,定义:运用共享技术有效地支持大量细粒度对象的复用。 看定义理解起来也不算难,就是将系统中需要重复创建的对象,共享在一个享元池里面, 当第二次创建的时候,直接调用享元池里面已经存好的对象就可以了。 主要用于大量需要重复创建的对象。 整体代码的结构有点像是简单工厂扩展演变而来的,在简单工厂的基础上,把重复创建的对象共享在享元池。 场景: 我们在玩一些...转载 2018-04-20 10:37:36 · 223 阅读 · 0 评论 -
PHP设计模式--工厂方法
今天着重学习了一下工厂方法(FactoryMethod)这一设计模式,以下是自己的一些学习心得和体会,做一个记录:工厂方法属于23种模式中的创建型模式之一,由于之前对简单工厂有过一些了解,而工厂方法是简单工厂的一种演变,从简单工厂中可以看出,一个与客户端交互的类里面要承担多个不同类的创建,是一个相当累的过程,而工厂方法就是在其基础上将这个交互类进行拆分,让各个类可以独立创建,以便于水平扩展。以创建...转载 2018-04-18 09:04:54 · 105 阅读 · 0 评论 -
PHP设计模式--抽象工厂
在学习过工厂方法之后,我所了解的工厂方法基本是去创建一个对象, 例如在玩游戏的时候,创建了一个关羽英雄,一个张飞英雄这样。 但是有时候程序设计时可能需要创建一组对象,这就出现了第二种创建型设计模式--抽象工厂方法(AbstractFactory)。 比方说,我在创建关羽的时候手上拿着青龙偃月刀,骑着赤兔马。 创建刘备的时候手上拿着雌雄双剑,骑着的卢马。 那么他们的兵器就需要一个类去实现,马又需要另...转载 2018-04-18 10:45:39 · 156 阅读 · 0 评论 -
PHP设计模式--单例模式
单例模式(Singleton)也属于创建型模式之一,理解起来不算很难, 看了一些资料,最基本的应用就是--任务管理器。 其实个人的理解就是无法创建第二个相同的对象。 程序会在内部判断是否已经创建过该对象,如果没有就创建,如果已经存在,就直接使用。 做了一些简单的记录,如下:<?php /** Singleton * 单例模式类 * @static $o...转载 2018-04-18 10:47:14 · 124 阅读 · 0 评论 -
PHP设计模式--原型模式
原型模式(Prototype) 理解起来也不算很难。 总结起来就是通过一种克隆的方式去创建对象,节省创建对象的复杂度。 主要可以用来防止重复创建对象带来的大量代码冗余。 记录代码如下:<?php /** 抽象原型类 * abstract Class Prototype */ abstract Class Prototype { abstract funct...转载 2018-04-18 10:48:55 · 118 阅读 · 0 评论 -
PHP设计模式--建造者模式
建造者模式(Builder) 是我认为在创建型模式中算比较难理解的一种模式。 建造者模式和抽象工厂模式有点相似都是去创建组合,但是抽象工厂用的多,建造者不常用。 建造者模式的特点就是将创建和表示分离。 继续以游戏为例,我们玩游戏创建英雄的时候,首先去抽象一个抽象建造者类,接着所有的英雄都继承这个抽象类。而Hero类是 英雄的表示类,与创建分离,所有英雄都可以通过这个类表示出来。 如果需要增加...转载 2018-04-18 10:51:06 · 115 阅读 · 0 评论 -
PHP设计模式--适配器模式
最近开始学习设计模式中第二部分----结构型模式,总共有七种。 学习的第一种结构型模式是适配器模式(Adapter),适配器模式中最简单,最普遍的举例就是电源转接头 所以这种模式理解起来不难。 以家用电压为例,提供一个适配器类,把220V的用电转换成人体所能承受的36V的安全电压。 代码如下:<?php /** * Created by Sublime. ...转载 2018-04-18 10:52:35 · 291 阅读 · 0 评论 -
PHP设计模式--桥接模式
桥接模式(Bridge)是一种对象结构型模式,将抽象部分与实现部分分离,使它们都可以独立地变化。 总结来说就是在多维度上,各自变化互不影响,通过桥接建立一定关联,进行动态组合, 这种模式的灵活性比较高。 就类似我们去吃盖浇饭里面配各种菜一样,例如青椒肉丝盖浇饭,土豆牛肉盖浇饭。 主食:饭,面。 辅食:青椒肉丝,土豆牛肉。 主食,辅食两个不同的维度,各自可以继续添加种类,例如:辅食可以再添加一个韭菜...转载 2018-04-18 10:53:45 · 318 阅读 · 0 评论 -
PHP设计模式--组合模式
组合器(Composite)模式,属于设计模式中的结构型模式之一,主要用途就是把多个对象组合成一个树状的结构来表示“整体—部分”的关系。 举例说明:我们用树状图来表示 江苏省->南京市->秦淮区和建邺区。 其中江苏省为一级,南京市属于江苏省作为二级,而建邺区和秦淮区并列属于南京市属于三级。 就得到如图结构:-->江苏省 1级-->-->南京市 ...转载 2018-04-18 10:54:49 · 393 阅读 · 0 评论 -
PHP设计模式--装饰模式
装饰模式(Decorator)也属于结构型模式之一,定义:动态地给一个对象增加一些额外的职责。 在我们生活中最为普遍的例子就是在玩游戏的时候随时伴随着人物角色的装备,皮肤。我相信不管男生女生,玩游戏的都买过吧。 其中最常见的就是一些游戏开发商,通过去做一些装备,例如武器,衣服,鞋子,戒指等等,来吸引玩家购买,穿在身上不仅好看,还带有额外属性。 这个例子是典型装饰器模式的应用,特点是在不影响其他类的...转载 2018-04-18 10:55:56 · 742 阅读 · 0 评论 -
PHP设计模式--外观模式
外观模式(Facade) 属于7种结构型模式中比较好理解的一种模式, 主要作用是为客户端提供一个统一的接口,不需要用户自己去创建各子类然后调用他们的方法。 好处是把子系统的逻辑和交互都隐藏了起来,缺点是每添加一个子类,都有可能要修改外观类(违反开闭原则)。 起初学习外观模式的时候有点和之前学习过的简单工厂模式混淆。 因为它们的结构还挺像的,都是提供一个统一的接口,之后看了些资料进行了对比。 区别...转载 2018-04-20 10:37:26 · 149 阅读 · 0 评论 -
PHP设计模式--访问者模式
访问者(Visitor)模式是一种复杂的行为型模式,从代码结构就可以清楚,主要包含访问者和被访问者。 百度定义:表示一个作用于某对象结构中的各元素的操作。使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。 场景举例(代码如下): 所涉及的对象有: 抽象访问者(Visitor) 具体访问者 兵器类等(Weapon) 抽象元素类 英雄类(hero) 具体元素类 刘备,张飞等(LiuBe...转载 2018-04-19 14:02:23 · 364 阅读 · 0 评论