随笔分类 - 面向对象
摘要:什么是策略模式策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。什么时候使用策略模式1、 多个类只区别在表现行为不同,可以使用Strategy模式,在运行时动态选择具体要执行的行为。2、 需要在不同情况下使用不同的策略(算法),...
阅读全文
摘要:代理模式是一种结构型设计模式,为其他对象提供一种代理,并以控制对这个对象的访问。而对一个对象进行访问控制的一个原因是为了只有在我们确实需要这个对象时才对它进行创建和初始化。它是给某一个对象提供一个替代者(占位者),使之在client对象和subject对象之间编码更有效率。代理可以提供延迟实例化(l...
阅读全文
摘要:什么是状态设计模式当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。什么时候使用状态模式对象中频繁改变非常依赖于条件语句。 就其自身来说...
阅读全文
摘要:什么是模板方法模式 模板方法(Template Method)设计模式中使用了一个类方法templateMethod(), 该方法是抽象类中的一个具体方法, 这个方法的作用是对抽象方法序列排序,具体实现留给具体类来完成.关键在于模板方法模式定义了操作中算法的"骨架",而由具体类来实现.什么时候使用...
阅读全文
摘要:_toString方法是在打印对象时自动调用的魔术方法,如果不声明会报以下错Catchable fatal error: Object of class String could not be converted to 示例:PHP里有很多的字符串函数,假如要先过滤字符首尾的空格,再求出字符串的长度...
阅读全文
摘要:什么是装饰器模式作为一种结构型模式, 装饰器(Decorator)模式就是对一个已有结构增加"装饰".适配器模式, 是为现在有结构增加的是一个适配器类,.将一个类的接口,转换成客户期望的另外一个接口.适配器让原本接口不兼容的类可以很好的合作.装饰器模式是将一个对象包装起来以增强新的行为和责任.装饰器...
阅读全文
摘要:面向对象编辑中对象被赋予了自省的能力,而这个自省的过程就是反射.反射,直观理解应时根据到达地找出出发地和来源.比方说,我给你一个光秃秃的对象,我可以仅仅通过这个对象就能知道它所属的类,拥有哪些方法.反射指在PHP运行状态中,扩展分析PHP程序,导出或提取出关于类,方法,属性,参数等详细信息,包括注释...
阅读全文
摘要:单例模式的必要性:1. 目的:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。2. 要点: 1). 某一个类只能有一个实例; 2). 必须自行创建这个实例; 3). 必须自行向整个系统提供这个实例。3. 作用:避免重复实例化,节省系统资源。例如在数据库操作方面,会大量存在数据库连接...
阅读全文
摘要:适配器很容易理解, 大多数人家庭都有手机转接器, 用来为移动电话充电,这就是一种适配器. 如果只有USB接头, 就无法将移动电话插到标准插座上. 实际上, 必须使用一个适配器, 一端接USB插头, 一端接插座. 当然, 你可以拿出电气工具,改装USB连接头, 或者重新安装插座, 不过这样会带来很多...
阅读全文
摘要:原型设计模式(Prototype Design Pattern)很有意思, 因为它使用了一种克隆技术来复制实例化的对象. 新对象是通过复制原型实例来创建的. 在这里, 实例是批实例化的具体类.原型设计模式的目的是通过使用克隆来减少实例化对象的开销.与其从一个类实例化新对象, 完全可以使用一个已有实例...
阅读全文
摘要:面向对象的三大基本特性是:封装、继承、多态 。1.封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。封装是 面向对象的特征之一,是对象和类概念的主要特性。 简单的说,一个类就是一个封装了数据以及操作这些数据的代码的逻辑实体。在一个对象...
阅读全文
摘要:工厂模式(FactoryDesign Pattern)作为一种创建型设计模式, 遵循了开放-封闭原则, 对修改封闭, 对扩展开放. 工厂方法(Factory Method)模式就是要创建"某种东西". 对于工厂方法模式, 要创建的"东西"是一个产品,这个产品与创建它的类之间不存在绑定.实际上,...
阅读全文
摘要:要设计一留言本,一切都将以留言本为核心,抓到什么是什么,按流程走下来,即按用户填写信息->留言->展示的流程进行。现在用面向对象的思维思考这个问题,在面向对象的世界,会想尽办法把肉眼能看见的以及看不见的,但是实际存在的物或者流程抽象出来。既然是留言本,那么就存在留言内容这个实体,这个留言实体(dom...
阅读全文
摘要:什么是依赖倒置呢?简单地讲就是将依赖关系倒置为依赖接口,具体概念如下:1.上层模块不应该依赖于下层模块,它们共同依赖于一个抽象(父类不能依赖子类,它们都要依赖于抽象类)2.抽象不能依赖于具体,具体应该要依赖于抽象。注意,这里的接口不是狭义的接口。为什么要依赖接口?因为接口体现对问题的抽象,同时由于抽...
阅读全文
摘要:替换原则由MIT计算机科学实验室的Liskov女士在1987年的OOPSLA大会上的一篇文章中提出,主要阐述有关继承的一些原则,故称里氏替换原则。2002年,Robert C.Martin出版了一本名为《Agile Software Development Principles Patterns a...
阅读全文
摘要:1.什么是“开放-封闭”随着软件系统规模的不断增大,软件系统的维护和修改的复杂性不断提高,这种困境促使法国工程院士Bertrand Meyer在1998年提出了“开放-封闭”(Open-Close Principle,OCP)原则,这条原则的基本思想是:Open(Open for extendtio...
阅读全文
摘要:设计应用程序的时候,如果一个模块包含多个子模块,那么我们应该小心对模块做出抽象。设想该模块由一个类实现,我们可以把系统抽象成一个接口。但是要添加一个新的模块扩展程序时,如果要添加的模块只包含原系统中的一些子模块,那么系统就会强迫我们实现接口中的所有方法,并且清寒要编写一些哑方法。这样的接口被称为肚胖...
阅读全文
摘要:单一职责原则(Single Pesponsibility Principle, SRP)单一职责有两个含义: 一个是避免相同的职责分散到不同的类中, 别一个是避免一个类承担太多职责为什么要遵守SRP呢?(1)可以减少类之间的耦合如果减少类之间的耦合,当需求变化时,只修改一个类,从而也就隔离了变化;如...
阅读全文
摘要:接口是对多重继承的一种变相实现, Traits可以被视为一种加强型的接口.先来看如下代码trait Hello{ private $name = 'chenqionghe'; public function sayHello() { echo 'hello '; ...
阅读全文
摘要:其中就有一个SPL(标准PHP库)的尝试,SPL中实现一些接口,其中最主要的就是Iterator迭代器接口,通过实现这个接口,就能使对象能够用于foreach结构,从而在使用形式上比较统一.比如SPL中有一个DirectoryIterator类,这个类在继承SplFileInfo类的同时,实现Ite...
阅读全文