设计模式
Renling【PHP】
我是一只程序狗
展开
-
初识设计模式——设计模式的六大原则
单一职责原则(Single Responsibility Principle, SRP)定义:就一个类而言,应该仅有一个引起它变化的原因解释:如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或抑制这个类完成其他职责的能力,当变化发生时,设计会遭到意想不到的破坏。开放-关闭原则(Open-Closed Principle, OCP)定义:对于...原创 2018-09-04 21:18:57 · 170 阅读 · 0 评论 -
初识设计模式——组合模式
个人理解定义:组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构(Copy的)。理解:存在前提条件,只有满足以下两个条件,才建议使用组合模式(Composite Pattern) 一组相似的对象,说明对象的相似度...原创 2019-02-19 13:56:23 · 152 阅读 · 0 评论 -
初识设计模式——桥接模式
学习笔记意图:把对象的实体部分与抽象部分分离开来,分开进行组合封装,使它们可以分别的变化。主要解决:主要解决的问题是存在多种变化的可能性,而各种的可能性不能通过简单的扩展就可以完成,会造成后续的类的数量爆炸式增多的问题。实现方式:将一个对象进行分割,将实体部分与抽象部分隔离出来,分别封装。在调用的时候,通过类的多态特性进行聚合调用。个人理解合成/聚合复用原则(CARP)中提到,...原创 2019-02-27 21:44:31 · 222 阅读 · 0 评论 -
初识设计模式——单例模式
个人理解意图:保证一个类仅有一个实例,并提供一个能够访问它的全局访问点。主要解决:一个类的频繁的实例化、销毁,或者需要保证全局只有一个此类的实例化对象,另外,也可以防止随意实例化而占用过多的内存空间。实现方式:将类的初始化函数私有化,使得外部不可直接实例化对象。然后在类的内部(由于初始化函数已经私有化了,所以必须在类的内部)设定一个能够获取到此类的实例化对象的静态方法,方法内部实现实例...原创 2019-02-23 13:20:40 · 157 阅读 · 0 评论 -
初识设计模式——备忘录模式
个人理解定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。理解:前提条件有两个,一个是不破坏封装性的前提下获取对象的成员属性;另一个是保存获取到的属性。由于PHP主要应用于web端,所以在一次请求中频繁改动某个对象的状态的情况并不常见,所以个人感觉该模式在PHP语言中应用并不广泛。主要解决:主要解决的是某个或多个状态的保存与恢复问题。组成部分:Mem...原创 2018-12-04 20:07:39 · 154 阅读 · 0 评论 -
初识设计模式——原型模式(PHP中的深浅复制)
深复制与浅复制看了很多资料,知道很多语言都有所谓的深复制、浅复制(深拷贝、浅拷贝),对于PHP来说,也是存在深复制、浅复制的,先标记一下定义:深复制:克隆一个变量来使用,在克隆的过程中,在内存中将会使用两份资源进行存储,改变一个变量的值不会影响到另一个变量的值。浅复制:克隆一个变量来使用,在克隆的过程中,在内存中不会使用两份资源进行存储,而是只存储在一份内存中,当一个变量的值发生变化的...原创 2018-11-07 20:55:38 · 258 阅读 · 0 评论 -
初识设计模式——状态模式
个人理解定义:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变其类。理解:这个模式主要解决的问题是消除庞大的条件分之语句,条件分支语句过大的使用,可能出现维护困难,操控的对象方法较为复杂等问题。例如订单的状态、游戏的等级等等都可以使用状态模式。主要解决:对象的行为依赖于它的状态(属性),并且可以根据它的状态改变而改变它的相关行为(状态模式的行为上说的,如果从状态模式的表...原创 2018-10-29 21:20:52 · 464 阅读 · 0 评论 -
初识设计模式——建造者模式
个人理解定义:将一个复杂对象的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。理解:一般用于可组合的对象中,比如商品(可通过价格、名称、介绍、规格等等进行组合生成)、套餐(可通过不同的商品进行组合),而不可在分的对象,比如优惠券对象,个人感觉在这个模式中用处不大。在可组合的对象中,将构建该对象的不同组成部分分别定义,然后使用指挥者控制建造者进行搭建,感觉解释的比较牵强,哈哈,理解...原创 2018-10-10 21:15:30 · 231 阅读 · 0 评论 -
初识设计模式——观察者模式
个人理解定义:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使他们能够自动更新自己。理解:在符合两个条件的情况下就可以使用观察者模式。第一,存在一(主题对象)对多(观察者对象)的依赖关系;第二,当主题对象在状态发生变化时,观察者对象需要更新自己。主要解决的是一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦...原创 2018-10-16 19:42:33 · 153 阅读 · 0 评论 -
初识设计模式——外观模式
个人理解定义:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高级接口,这个接口使得这个子系统更加容易使用。外观模式的构造:一个子系统的若干类(可以负责相同的事务,也可以负责不同的事务;可以继承同一父类,也可以内部方法尽不相同)、一个外观类Facade。使用方法: 在设计初期阶段,应该要有意识的将不同的两个层分离,层与层之间建立外观Facade 在开发阶段,子系...原创 2018-10-09 20:49:25 · 326 阅读 · 0 评论 -
初识设计模式——模板模式
个人理解定义:定义一种操作的算法骨架,而将一些步骤延迟到子类中。延迟方法使得子类可以不改变一个算法结构即可重定义该算法的某些特定步骤。在模板模式中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。模板模式的基本构造:一个模板抽象类、至少一个继承模板抽象类的实体类。模板模式中,模板抽象类将模板的大体骨架做好,但某些具体的可变...原创 2018-09-30 12:59:00 · 221 阅读 · 0 评论 -
初识设计模式——装饰器模式
个人理解定义:允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。刚开始接触的时候,实在不知道装饰器的意思,经过反复的查看资料,咀嚼书上的各种例子,总结出来的装饰器意思就是“用于修饰主体功能的代码叫做装饰器代码,而装饰器模式则可以用于添加新的装饰器,无需扩展子类即可实现多种装饰的主体功能(纯属个人理解,不是官方的定义)”,举个...原创 2018-09-26 08:58:31 · 278 阅读 · 0 评论 -
初识设计模式——工厂模式
由于简单工厂模式违反了设计模式六大原则中的“开闭原则”,所以产生了工厂模式,工厂模式定义一个创建对象的接口,让子类决定实例化那一个类。工厂方法使一个类的实例化延迟到子类。以之前的简单工厂模式所实现的功能为例,工厂模式的代码如下。工厂接口<?phpinclude './Claculator.php';include './claculator/Add.php';include...原创 2018-09-17 08:59:30 · 324 阅读 · 0 评论 -
初识设计模式——UML类图
序言【初识设计模式】系列主要作为本人的设计模式的学习记录(学习来源主要来自《大话设计模式》这本书,后面会将PDF格式的文件放在博客中,有需要的朋友可以下载),有需要的朋友也可以作为参考。由于在设计模式中本人也是新手,所以可能存在理解偏差的地方。UML类图先说一下为什么要学习UML图,个人感觉UML图就类似于工程中的CAD图纸,没有图纸的建筑也是存在的,要么这个建筑非常小(比如我们家的农...原创 2018-09-03 21:19:44 · 241 阅读 · 0 评论 -
初识设计模式——简单工厂模式、策略模式及两者的结合使用
简单工厂模式简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。简单工厂模式中工厂对象的主要功能为决定创建出哪一种产品类,所以,工厂类中是存在判断的。以实现一个简单的...原创 2018-09-11 14:51:54 · 317 阅读 · 0 评论 -
初识设计模式——迭代器模式(PHP中迭代器(Iterator)的使用)
初始迭代器模式迭代器模式提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。在《大话设计模式》中提到,此设计模式实用价值远不如学习价值大了,martin flower甚至提出撤销此设计模式。另外,无论是JAVA、Python,亦或是PHP中,都存在多种多样的遍历聚合元素的方式,所以此处就不过多的去了解了。这里我主要记录的是自己对PHP迭代器Iterator的抽象类的使用...原创 2019-02-20 22:12:17 · 472 阅读 · 0 评论