合规国际互联网加速 OSASE为企业客户提供高速稳定SD-WAN国际加速解决方案。 广告
# 设计思想 提炼设计模式的几个原则: 开闭原则:模块应对扩展开放,而对修改关闭。 里氏代换原则:如果调用的是父类的话,那么换成子类也完全可以运行。 依赖倒转原则:抽象不依赖细节,面向接口编程,传递参数尽量引用层次高的类。 接口隔离原则:每一个接口只负责一种角色。 合成/聚合复用原则:要尽量使用合成/聚合,不要滥用继承。 <http://c.biancheng.net/view/1397.html> 设计模式分类 1、创建型模式: 单例模式、工厂模式(简单工厂、工厂方法、抽象工厂)、创建者模式、原型模式。 2、结构型模式: 适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。 3、行为型模式: 模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式。\* ## **快速记忆:** 1,创建型模式有五种:工厂方法模式 抽象工厂模式 单例模式 建造者模式 原型模式---口诀:**原来的建设工人单独抽奖** 解释:原(原型模式)来的建(建造者模式)设工(工厂方法模式)人单(单例模式)独抽(抽象方法模式)奖。 2,结构型模式有其中:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式---口诀:**带上适当的装备组合可以让外国侨胞享受(游戏)** 解释:带(代理模式)上适(适配器模式)当的装(装饰模式)备组(组合模式)合可以让外(外观模式)国侨(桥接模式)胞享(享元模式)受(游戏) 3,行为型模式有十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式---口诀:**多次命令和责备中,车模见状慌忙解开(衣服)** 解释:多次(迭:多次的意思,迭代模式)命(命令模式)令和责(责任链模式)备(备忘录模式)中(中介者模式),车(策略模式) 模(模板方法模式)见(观察着模式)状(状态模式)慌(访问者模式)解(解释器模式)开(衣服)。 所以只要三句话,当你的脑海中经常有这三句话的时候,23中设计模式就过目不忘了,接下来的就是去实践了吧。 ## **图解:** +:公有(Public) -:私有(Private) \#:受保护(Protected) ~:朋友(Friendly)php没有java才有 ○:interface接口 免费Visual Paradigm UML工具: UML 中的类图有以下几种关系:依赖关系、关联关系、聚合关系、组合关系、泛化关系和实现关系。其中泛化和实现的耦合度相等,它们是最强的。 ## **依赖关系:**- - - - - - > > 另外的类以形参、局部变量、或者以静态方法调用的方式存在于这个类里某个方法里 ## **关联关系:** > 另外的类以该属性的的方式存在于该类(或者互相以属性的方式存在于彼此属性里),注意方法形参有时也表示的是关联关系(如析构函数)而不是依赖,需要对代码进一步分析,首先判断类之间是否是一种“关联”关系,若不是 关联关系分为一般关联关系、聚合关系和组合关系 - **双向关联关系**:---------或者<--------> **单项关联关系**:-----> - **聚合关系**:------◇ 聚合是整体和个体之间的关系,如:老师和学校,学校没了老师还是老师可单独出来,又例如,汽车类与引擎类、轮胎类,以及其它的零件类 契合坏了单独的零件还存在。 与关联关系一样,聚合关系也是通过实例变量实现的。但是关联关系所涉及的两个类是处在同一层次上的,而在聚合关系中,两个类是处在不平等层次上的,一个代表整体,另一个代表部分 - **组合关系**:------◆ 比聚合更强烈的整体和个体之间的关系,例如:头和嘴巴,头没了嘴巴也会没 > 以上关系的耦合度依次增强(暂时理解为当一个类发生变更时,对其他类造成的影响程度,影响越小则耦合度越弱,影响越大耦合度越强) ## **extends泛化关系(继承关系):**-------▷ ## **implement实现关系:**- - - - - - - - - - - - - -▷ ### **依赖和关联的区别** > 关联表示类之间的“持久”关系,这种关系一般表示一种重要的业务之间的关系,需要保存的,或者说需要“持久化”的,或者说需要保存到数据库中的。比如学生管理系统中的Student类和Class(班级)类,一个Student对象属于哪个Class是一个重要的业务关系,如果这种关系不保存,系统就无法管理。另外,依赖表示类之间的是一种“临时、短暂”关系,这种关系是不需要保存的,比如Student类和StuEditScreen(学生登录界面)类之间就是一种依赖关系,StuEditScreen类依赖Student类,依赖Student对象的信息来显示编辑学生信息 > 关联关系:关联(Association)关系是对象之间的一种引用关系,何为引用?A类实例化的时候需要B类的对象引用或指针作为参数 > 依赖关系:依赖(Dependency)关系是一种使用关系,是**临时性**的关联且总是单向的,它是对象之间耦合度最弱的一种关联方式 > 某个类以**成员变量**的形式出现在另一个类中,二者是关联关系;某个类以**局部变量**的形式出现在另一个类中,二者是依赖关系。 > 聚合关系:弱关联,整体和部分可以独立存在 > 组合关系:强关联,整体和部分不可分割,不能独立存在。 ## **例子:** \- - - - - - >:依赖关系:对象之间耦合度最弱的一种关联方式,是临时性的关联。在代码中,某个类的方法通过**局部变量**、**方法的参数**或者对**静态方法的调用**来访问另一个类(被依赖类)中的某些方法来完成一些职责 **依赖可能的四种情况:** ``` <pre class="calibre10">``` <span class="token">//Person类call方法的参数类型是MobilePhone,这种情况成为耦合</span> class <span class="token4">MobilePhone</span><span class="token3">{</span> public <span class="token5">function</span> <span class="token4">transfer</span><span class="token3">(</span><span class="token3">)</span><span class="token3">{</span> echo <span class="token2">"语音传送"</span><span class="token3">;</span> <span class="token3">}</span> <span class="token3">}</span> class <span class="token4">Person</span><span class="token3">{</span> $name<span class="token1">=</span><span class="token2">""</span><span class="token3">;</span> public <span class="token5">function</span> <span class="token4">call</span><span class="token3">(</span>MobilePhone $mp<span class="token3">)</span><span class="token3">{</span> $mp<span class="token1">-</span><span class="token1">></span><span class="token4">transfer</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token3">}</span> <span class="token">//Person类call方法的参数类型是MobilePhone的属性,这种情况成为紧耦合</span> class <span class="token4">MobilePhone</span><span class="token3">{</span> public $num<span class="token1">=</span><span class="token6">15632663388</span>; <span class="token3">}</span> class <span class="token4">Person</span><span class="token3">{</span> public $num<span class="token1">=</span><span class="token5">null</span><span class="token3">;</span> public <span class="token5">function</span> <span class="token4">call</span><span class="token3">(</span>$num<span class="token3">)</span><span class="token3">{</span> $this<span class="token1">-</span><span class="token1">></span>num<span class="token1">=</span>$num<span class="token3">;</span> <span class="token3">}</span> <span class="token3">}</span> <span class="token">//ClassA中某个方法的实现实例化ClassB</span> <span class="token">//ClassA中某个方法的返回值的类型是ClassB;</span> ``` ``` 关联关系:对象之间的一种引用关系 一般关联:通常将一个类的对象作为另一个类的成员变量来实现关联关系 \---------或者<-------->:双向关联 \----->:单项关联: \------◇:聚合关系:是关联关系的一种,是强关联关系,是整体和部分之间的关系,是 has-a 的关系,菱形指向整体 聚合关系也是通过成员对象来实现的,其中成员对象是整体对象的一部分,但是成员对象可以脱离整体对象而独立存在。例如,学校与老师的关系,学校包含老师,但如果学校停办了,老师依然存在。 \------◆:组合关系:类之间的整体与部分的关系,但它是一种更强烈的聚合关系,是 cxmtains-a 关系,菱形指向整体 在组合关系中,整体对象可以控制部分对象的生命周期,一旦整体对象不存在,部分对象也将不存在,部分对象不能脱离整体对象而存在。例如,头和嘴的关系,没有了头,嘴也就不存在了 \-------▷:泛化关系(继承):是对象之间耦合度最大的一种关系,表示一般与特殊的关系,是父类与子类之间的关系,是一种继承关系,是 is-a 的关系 \- - - - - - - - - - - - - -▷:**implements实现关系**