欢迎来到天天文库
浏览记录
ID:46220144
大小:511.99 KB
页数:13页
时间:2019-11-21
《设计模式总结》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、七大设计原则:单一职责原则(SRP):对于一个类,应该只有一个导致其变化的原因。涉及模式:门血、Proxy开闭原则(OCP):设计一个模块时,应该使该模块在不被修改的前提下被扩展,即可在不必修改源代码的悄况下改变该模块的行为。对扩展开放,对更改封闭。抽象化是关键。涉及模式:Strategy,SimpleFactory,FactoryMethod,AbstractFactory,Builder,Bridge,I'Jlfll,Mediator.里氏替换原则(LSP):—个软件实体如果使用的是一个基类的话,一定适用于其子类,而且根本不能觉察出基类对象和子类对象的区别。(在软件屮如果能够使川基类对象
2、,那么一定能够使用其了类对象)尽虽从抽象类继承而不从具体类继承;如果两个具体类A和B冇继承关系,那么最简单的是建立一个抽象类C,让A和B成为C的子类;如果有一个由继承关系形成的等级结构,则所有树叶节点应该是具体类而所冇树枝节点应该是抽彖类或接口。涉及模式:Strategy,Composite,Proxy依赖倒置原则(DIP):髙层模块不应该依赖低层模块,它们都应该依赖抽象。抽象不应该依赖于细节,细节应该依赖于抽彖。针对接口编程,不要针对实现编程。关键是以抽象方式耦仑。涉及模式:FactoryMethod,Prototype,Iterator.接口隔离原则(ISP):使用多个专门的接口比使用单
3、一的总接口耍好。不应该强迫客户依赖于他们不用的方法;一个类的不内聚的“胖接口〃应该被分解为多组方法,每一组方法都服务于一组不同的客户程序。涉及模式:Memento,Iterator.组合/聚合复用原则(CARP):尽量使用组合/聚合,而不要使用继承。继承是类型复用,白箱复川,使得超类的细节被眾露给子类,当超类修改时,子类也被迫修改;组合/聚合可以将己有的对象纳入到新对象中,使之成为新对象的-部分,因此新对象可以调用已冇对彖的功能,是黑箱复用。如果两个类是关系而非〃ls・a〃关系,但设计成继承,肯定违反LSP。迪米特法则(LoD):—个対象应该对其他対象乂尽可能少的了解。(不要和陌生人说话)狭
4、义:如果两个类不必彼此直接通信,那么这两个类就不应当发牛直接的相互作用。如果具屮的一个类需要调用另一个类的某一个方法,可以通过第三者转发这个调用。广义:对对象之间的信息流虽、流向以及信息的彩响进行控制;充分体现封装的概念。基本原则:只跟直接依赖的对象通信(不要耦合没有明显通信需求的2个对彖)涉及模式:门面、Mediator.GRASP核心是自己干自己能干的事,自己只干自己的事,也就是职责的分配和实现高内聚。GRASP是对象职责分配的基本原则。包括9个模式:1)InformationExpert信息专家将责任分配给信息专家,信息专家是指具有履行职责所需信息的类(实现高内聚)。信息专家模式是而向
5、对象设计的最基本原则。优点:信息的拥冇者类同时就是信息的操作者类,可以减少不必要的类Z间的关联;各类的职责单•明确,容易理解。满足了面向对象设计的封装的思想。对应于面向对象设计原则中的单一•职责原则。2)Creator创建者谁来创建?当以下条件之一为真时,将创建类A实例的职责分配给类B:B容纳A;B聚集A;B具有A的初始化数据;B记录A;B频繁使用A。优点:整个结构清晰易懂;有利于类或组件的重用;防止职责的分散;降低耦合性。与各种工厂模式相对应(简单工厂、工厂方法、抽象工厂)3)Lowcoupling低耦合如何减少变化所产生的影响?责任的分配要使(不必要的)耦合保持最低。耦合主要指不同类之间
6、相互关联的紧密程度,应该以降低类之间的耦合关系作为职责分配的原则。4)Highcohesion高内聚如何保持对象有重点、可理解和町管理,同吋还要支持低耦合的作用?责任的分配要保持高内聚。紧密相关的功能(职责)应该分配给同一个类。低内聚的类存在难以被理解和维护,难实现类的重用,系统脆弱不断需要修改的缺点(难理解、难复用、难维护、脆弱)高内聚优点:可表现关联责任的一个抽象,易于实现类的重用;使维护工作变得简单;使得系统模块化工作,方便团队工作。模式优点:聚集相关功能,结构清晰,容易理解;类的职责单一明确,降低类的复杂程度,使用简单,有利于重用;适应需求变化,一旦发生变化时,可以把影响缩小到最小范
7、围。高内聚与低耦合模式是GRASP英他模式的根木。5)Controller控制器Q:在UI层之上笫一个接受和协调(控制)系统操作的对象是哪个?(谁应该负责处理一个输入系统事件?)A:将职责分配给代表一下选择之一事物对象:a)代表整个“系统〃、“跟对象〃、运行软件的设备,或者是主要的子系统;b)代表发生该系统操作的用例场景。(对于同一用例场景的所有系统事件使用相同的控制器类)A:把接收或者处理系统事件消息的职责
此文档下载收益归作者所有