卡卷网
当前位置:卡卷网 / 每日看点 / 正文

软件设计中有哪些常见的设计模式?

作者:卡卷网发布时间:2025-01-07 17:05浏览数量:72次评论数量:0次

参考《<>设计模式:可复用面向对象软件的基础》,序号和书籍上的序号对应。

3.对象创建型模式

<>3.1AstractFactory(抽象工厂)——对象创建型模式

意图:提供一个接口以创建一系列相关或相互依赖的对象,而无须指定它们具体的类。

<>3.2uilder(生成器)——对象创建型模式

意图:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

<>3.3FactoryMethod(工厂方法)——对象创建型模式

意图:定义一个用于创建对象的接口,让子类决定实例化哪一个类。FactoryMethod使一个类的实例化延迟到其子类。

<>3.4Prototype(原型)——对象创建型模式

意图:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

<>3.5Singleton(单件)——对象创建型模式

意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。

<>4.对象结构型模式

<>4.1Adapter(适配器)——类对象结构型模式

意图:将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

<>4.2ridge(桥接)——对象结构型模式

意图:将抽象部分与它的实现部分分离,使它们可以地变化。

<>4.3Composite(组合)——对象结构型模式

意图:将对象组合成树形结构以表示“部分–整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性。

<>4.4Decorator(装饰)——对象结构型模式

意图:动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相生成子类更为灵活。

<>4.5Facade(外观)——对象结构型模式

意图:为子中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子更加容易使用。

<>4.6Flyweight(享元)——对象结构型模式

意图:运用共享技术有效地支持大量细粒度的对象。

<>4.7Proxy()——对象结构型模式

意图:为对象提供一种以控制对这个对象的访问。

5.对象行为型模式

<>5.1ChainofResponsiility(职责链)——对象行为型模式

意图:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。

<>5.2Command(命令)——对象行为型模式

意图:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求志,以及支持可撤销的作。

<>5.3Interpreter(解释器)——类行为型模式

意图:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。

<>5.4Iterator(迭代器)——对象行为型模式

意图:提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。

<>5.5Mediator(中介者)——对象行为型模式

意图:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以地改变它们之间的交互。

<>5.6Memento(备忘录)——对象行为型模式

意图:在不封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。

<>5.7Oserver(观察者)——对象行为型模式

意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

<>5.8State(状态)——对象行为型模式

意图:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。

<>5.9Strategy(策略)——对象行为型模式

意图:定义一系列的算法,把它们一个个封装起来,并且使它们可相互换。本模式使得算法可于使用它的客户而变化。

<>5.10TemplateMethod(模板方法)——类行为型模式

意图:定义一个作中的算法的骨架,而将一些步骤延迟到子类中。TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

<>5.11Visitor(访问者)——对象行为型模式

意图:表示一个作用于某对象结构中的各元素的作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新作。


面向对象设计原则

<>1.单一职责原则(SingleResponsiilityPrinciple,SRP)

含义:一个类或方法只负责一个功能点,即一个类应该仅有一个引起它变化的原因。

作用:减少类之间的耦合,提高类的复用性。如果一个类承担多个职责,当其中一个职责发生变化时,可能会影响职责,导致脆弱的设计。

<>2.开闭原则(Open-ClosePrinciple.OCP)

含义:对扩展开放,对修改封闭。即软件实体(类、模块、函数等)应可以扩展但不可修改。

实现方式:通过抽象化来实现,即对抽象编程而不对具体编程。让类依赖于固定的抽象,因此对修改是封闭的:而通过面向对象的继承和多态机制,可以实现对抽象类的继承,通过覆写其方法来改变固有行为,实现新的拓展方法,因此是开放的。

<>3.里氏替换原则(LiskovSustitutionPrinciple,LSP)

含义:子类必须能够替换它们的父类且不影响程序的正确性。简单来说,子类可以扩展父类的功能,但不能改变父类的原有功能。

作用:保证继承复用的可性,减少代码兄余,避免运行期的类型判别。

<>4.依赖倒置原则(DependenceinversionPrinciple,DlP)

表述:抽象不应该依赖于细节,细节应该依赖于抽象。即针对接口编程,而不是针对实现编程。

作用:降低类间的耦合性,提高代码的可读性和可性。通过依赖抽象接口,而不是具体实现类,使得具体类可以被别的具体类替换,而不影响客户端。

<>5.接口隔离原则(InteceSegregationPrinciple,lSP)

含义:客户端不应该被强迫依赖它们不使用的方法:一个类对另外一个类的依赖应该建立在最小的接口上。

实现方式:使用多个专门的接口使用单一的总接口要好。这有助于降低类之间的耦合度,提高的灵活性和可性。

<>6.合成/聚合复用原则(Composite/AggregateReusePrinciple,CARP)

含义:尽量使用合成/聚合的方式,而不是使用继承来达到复用的目的。

作用:保持类的封装性,使类和类继承层次保持较小规模,并降低复杂度。合成和聚合是关联的特殊种类,其中聚合表示一种弱的拥有关系,而合成表示一种强的拥有关系。

<>7.迪米特法则(LawofDemeter,LOD)

含义:一个对象应该对对象保持最少的了解,只与直接朋友通信。

作用:降低类之间的耦合度,提高的可性和可扩展性。通过减少类之间的依赖关系,可以降低因某个类的变化而引发的连锁反应。


附:绘图符号说明(UML/OMT)

<>UML

+、-表示属性是公开的还是私有的(pulic或private),还有#表示保护(protect)

关联关系中:0..*(零或多)、1..*(一或多)、*(多)、1、4

<>OMT

END

免责声明:本文由卡卷网编辑并发布,但不代表本站的观点和立场,只提供分享给大家。

卡卷网

卡卷网 主页 联系他吧

请记住:卡卷网 Www.Kajuan.Net

欢迎 发表评论:

请填写验证码