??xml version="1.0" encoding="utf-8" standalone="yes"?>成人在线中文字幕,精品精品导航,国产精品三级电影http://www.aygfsteel.com/gufen/category/3584.htmlzh-cnWed, 28 Feb 2007 00:57:13 GMTWed, 28 Feb 2007 00:57:13 GMT60软g设计中的原则http://www.aygfsteel.com/gufen/archive/2005/09/26/14126.html落花飞雪落花飞雪Mon, 26 Sep 2005 09:21:00 GMThttp://www.aygfsteel.com/gufen/archive/2005/09/26/14126.htmlhttp://www.aygfsteel.com/gufen/comments/14126.htmlhttp://www.aygfsteel.com/gufen/archive/2005/09/26/14126.html#Feedback0http://www.aygfsteel.com/gufen/comments/commentRss/14126.htmlhttp://www.aygfsteel.com/gufen/services/trackbacks/14126.html     q里说的几个软g模式是属于原则层ơ一U的Q比GoF{Y件设计模式高一层。遵循这些原则可以我们设计出来的Y件有更好的可复用性和可维护性,同样GoF{Y件设计模式也是遵循这一原则的?/SPAN>

     下边的条列只是简单的介绍Q以便忘C偶尔q来游览一下,详细的介l请参阅Q?/SPAN>Java模式》、?/SPAN>UML和模式应?/SPAN>-面向对象分析与设计导论?/SPAN>

1.         GRASP模式

GRASP?/SPAN>General Responsibility Assignment Software Pattern(通用指责分配软g模式)的羃写?/SPAN>

1)  专家模式(Expert)

解决ҎQ将职责分配l具有行职责所需要的信息的类

通俗点就是:该干嘛干嘛去Q别别人的闲事或者我的职责就是搞q个Q别的事不管?/SPAN>

举个单的例子Q如果有一个类是专门处理字W串相关的类Q那么这个类只能有字W串处理相关的方法,而不要将日期处理的方法加q来。也是提高软g高内聚一U原则?/SPAN>

2)  创徏?/SPAN>(Creator)

解决ҎQ将创徏一个类A的实例的职责指派l类B的实例,如果下列条g满的话Q?/SPAN>

a)         B聚合?/SPAN>A对象

b)        B包含?/SPAN>A对象

c)        BU录?/SPAN>A对象的实?/SPAN>

d)        B要经怋?/SPAN>A对象

e)         ?/SPAN>A的实例被创徏ӞBh要传递给A的初始化数据(也就是说B是创?/SPAN>A的实例这Q务的信息专家)

f)         B?/SPAN>A对象的创?/SPAN>

如果以上条g中不止一条成立的话,那么最好让B聚集或包?/SPAN>A

通俗点就是:我要用你所以我来创ZQ请不要让别人创Z

q个模式是支持低耦合度原则的一个体?/SPAN>

3)  高聚合度或高内聚(High Cohesion)

解决ҎQ分配一个职责的时候要保持cȝ高聚合度

聚合度或内聚?/SPAN>(cohesion)是一个类中的各个职责之间相关E度和集中程度的度量。一个具有高度相兌责的cdƈ且这个类所能完成的工作量不是特别巨大,那么他就是具有高聚合度?/SPAN>

4)  低耦合度或低耦合(Low Coupling)

解决ҎQ在分配一个职责时要保持低耦合度?/SPAN>

耦合?/SPAN>(coupling)是一个类与其它类兌、知道其他类的信息或者依赖其他类的强q度的度量。一个具有低(?/SPAN>)耦合度的cM依赖于太多的其他cR?/SPAN>

5)  控制?/SPAN>(Controller)

解决ҎQ将处理pȝ事g消息的职责分z代表下列事物的类Q?/SPAN>

a)         代表整个“系l”的c(虚包控制者)

b)        代表整个企业或组l的c(虚包控制者)

c)        代表真实世界中参与职责(角色控制者)的主动对象类Q例Q一个h的角Ԍ

d)        代表一个用况中所有事件的人工处理者类Q通常用?/SPAN><用例?/SPAN>>处理者”的方式命名Q用例控制者)

q是一个控制者角色职责分配的原则Q就是哪些控制应该分z哪个角色?/SPAN>

6)多?/SPAN>

当相关的可选择的方法或行ؓ随着cd变化Ӟ行为的职责-使用多态的操作-分配l那些行为变化的cd

也就是说量Ҏ象层~程Q用多态的Ҏ来判断具体应该用那个类Q而不是用if instanceof 来判断该cL什么接来执行什么?/SPAN>

7)U虚?/SPAN>

一个纯虚构意味着虚构某些事物Q而不是到了迫不得已我们才q样做?/SPAN>

例,我们?/SPAN>Salecȝ数据要存入数据库Q但是他必须和数据库接口相连接,如果接口连接放?/SPAN>SalecM势必增加该类的耦合度,所以我们可以虚构一个类来处理与数据库接口连接的问题。这个类是我们虚构出来的一个事物?/SPAN>

8)中介?/SPAN>

职责分配给一个中间对象以便在其他构g或服务之间仲裁,q样q些构g或服务没有被直接耦合。这个中间对?/SPAN>(intermediary)在其他构件或服务间创Z个中介?/SPAN>(Indirection)。这个中间对象也׃7)中的U虚构?/SPAN>

9)不要和陌生h讲话

分配职责l一个客L的直接对象以使它与一个间接对象进行协作,q样客户端无需知道q个间接对象?/SPAN>

q个模式-也被叫做(Demeter)准则?/SPAN>

       通俗点就是:只与你直接的朋友们通信

                            不要跟“陌生h”说?/SPAN>

每个软g单位对其他的单位都只有最的知识Q而且局限于那些与本单位密切相关的Y件单?/SPAN>

2.         其他设计原则

1)“开-闭”原则(Open-Closed PrincipleQ或?/SPAN>OCPQ?/SPAN>

一个Y件实体应当对扩展开放,对修改关闭?/SPAN>

意思就是在设计一个模块的时候,应当使这个模块在不被修改的前提下被扩展。换a之,应当可以在不修改代码的情况下改变q个模块的行为?/SPAN>

2)里氏代换原则Q?/SPAN>Liskov Substitution Principle, 或?/SPAN>LSPQ?/SPAN>

q个是量用多态的Ҏ~程Q也是GRASP模式中的多态?/SPAN>

3)依赖倒{原则Q?/SPAN>Dependency Inversion Principle, 或?/SPAN>DIPQ?/SPAN>

依赖倒{原则讲的是:要依赖于抽象Q不要依赖于具体

是说我们尽量在抽象层进行控制编E,要针Ҏ口编E,不要针对实现~程?/SPAN>

4)接口隔离原则Q?/SPAN>Interface Segregation Principle, 或?/SPAN>ISPQ?/SPAN>

使用多个专门的接口比使用单一的L口要好。也是Q从一个客L的角度来Ԍ一个类对另外一个类的依赖性应当是建立在最的接口上的?/SPAN>

5)l合/聚合复用原则Q?/SPAN>Composition/Aggregation Principle, 或?/SPAN>CARPQ?/SPAN>

又叫合成复用原则。原则就是在一个新的对象里面用一些已有的对象Q之成为新对象的一部分Q新的对象通过向这些对象的委派辑ֈ复用已有功能的目的。也是Q要量使用cȝ合成复用Q尽量不要用?/P>

6)变与不变的分?BR>    更扩展一?是不同变化的lgq行隔离.最单的例子是javabean中的存取器。它隔离了不变的接口和变化的内部属性。这斚w体现最好的个h觉得是eclipseQ通过变化的插Ӟeclipse可以用来实现M功能?/SPAN>



落花飞雪 2005-09-26 17:21 发表评论
]]>
վ֩ģ壺 ܱ| | | Ϫ| | Ϫ| | | | | ƽ| ǭ| ޼| | ѳ| | ϸ| | | ƺ| ƽ| | | ɽ| Ԫ| | IJ| ն| | | ̨| | | ½| ʤ| | ɳ| ˮ| ͺ| ͬ| ڽ|