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