软件开发设计模式 20种

合集下载

20种软件架构风格

20种软件架构风格

1、管道过滤器风格(1)特点:①在管道过滤器风格下,每个功能模块都有一组输入和输出。

功能模块称作过滤器;功能模块间的连接可以看作输入、输出数据流之间的通路,称作管道。

②管道-过滤器风格的特性之一在于过滤器的相对独立性,即过滤器独立完成自身功能,相互之间无需状态交互。

③从解耦的角度:每个过滤器之间都是解耦的,每个过滤器都专注于自己的职责。

过滤器是独立运行的组件;过滤器对其处理上下连接的过滤器“无知”;结果的正确性不依赖于各个过滤器运行的先后次序。

(解耦的好处)解耦能够保持组件之间的自主和独立。

它的直接结果就是改动成本低,维护成本低,可读性高。

(2)优点:①由于每个组件行为不受其他组件的影响,整个系统的行为易于理解。

②管道-过滤器风格支持功能模块的复用。

(任何两个过滤器,只要它们之间传送的数据遵守相同的规约,就可以相连接。

)③基于管道-过滤器风格的系统具有较强的可维护性和可扩展性。

④支持一些特定的分析,如吞吐量计算和死锁检测等。

(3)缺点:①管道-过滤器风格往往导致系统处理过程的成批操作。

②根据实际设计的需要,设计者需要对数据传输进行特定的处理(如加密),导致过滤器必须对输入、输出管道中的数据流进行解析和反解析,增加了过滤器具体实现的复杂性。

③交互式处理能力弱。

(4)实例:①传统的编译器,一个阶段的输入是另一个阶段的输出。

②Unix和DOS中的管道操作符‘|’:将符号‘|’之前的命令的输出作为‘|’之后命令的输入。

2、事件驱动风格(1)基本思想:不直接调用一个过程,而是发布或广播一个或多个事件。

系统中的其它组件通过注册与一个事件关联起来的过程,来表示对某一个事件感兴趣。

当这个事件发生时,系统本身会调用所有注册了这个事件的过程。

这样一个事件的激发会导致其它模块中过程的隐式调用。

(2)从解耦的角度:系统组件松耦合。

在系统执行的过程中,可以并行处理不可预期的事件发生。

观察者模式:让多个观察者对象同时监听某一主题对象,当该对象状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。

常见设计模式及应用场景

常见设计模式及应用场景

常见设计模式及应用场景设计模式是一种解决特定问题的经验总结,可以提高代码的可重用性、可读性和灵活性。

在软件开发过程中,常见的设计模式有23种,下面将对其中的几种常见的设计模式及其应用场景进行介绍。

1. 单例模式(Singleton Pattern):单例模式用于限制一个类只能有一个实例,并提供一个全局访问点。

在需要频繁创建和销毁对象的场景下,可以使用单例模式来减少系统开销。

例如,在多线程环境下需要共享某个资源时,通过单例模式可以保证该资源只有一个实例。

2. 工厂模式(Factory Pattern):工厂模式用于创建对象,把实例化对象的过程封装在一个工厂类中。

它解耦了对象的创建和使用,提高了代码的可扩展性。

例如,一个电商平台上有多种类型的商品,可以通过工厂模式根据用户的选择来创建相应类型的商品。

3. 观察者模式(Observer Pattern):观察者模式定义了一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖它的对象都会得到通知并自动更新。

观察者模式适用于对象之间存在一种一对多的关系,并且对象之间需要保持一致。

例如,一个新闻发布系统中,当发布一条新闻时,系统需要通知所有订阅该新闻频道的用户。

4. 策略模式(Strategy Pattern):策略模式定义了一系列可以互相替换的算法,并根据具体情况选择合适的算法。

使用策略模式可以避免使用大量的if-else语句,提高代码的可维护性和扩展性。

例如,在一个电商平台中,根据会员等级的不同,可以采用不同的折扣策略来计算商品的价格。

5. 适配器模式(Adapter Pattern):适配器模式用于将两个不兼容的接口转换为可兼容的接口,使得不同的类可以协同工作。

适配器模式可以增强代码的复用性和灵活性。

例如,一个音频播放器只支持mp3格式的音乐文件,当我们需要播放其他格式的音乐文件时,可以使用适配器模式将不同格式的音乐文件转换为mp3格式。

6. 建造者模式(Builder Pattern):建造者模式可以将创建复杂对象的过程与表示分离,使得同样的创建过程可以创建不同的表示。

软件开发中的设计模式及其应用

软件开发中的设计模式及其应用

软件开发中的设计模式及其应用设计模式是由四人带领的软件开发者团队在1994年《设计模式:可复用面向对象软件的基础》一书中提出的。

设计模式是一种被证明有效的解决方案,用于解决面向对象软件设计中的常见问题。

这些模式已被广泛应用于软件开发领域,并被证明可提高软件开发的效率和可重用性。

本文将介绍其中的几种常见设计模式及其应用,以供软件开发者参考。

1.工厂模式工厂模式是一种创建型模式,它提供了一个通用的接口,用于创建对象。

通过使用工厂模式,我们可以隐藏创建对象的实现细节,使得客户端代码无需知道要实例化哪个类。

应用:在开发过程中,我们通常会遇到许多场景需要创建多个对象,而这些对象的创建逻辑可能比较复杂。

在这种情况下,我们可以使用工厂模式来将复杂的对象创建流程进行封装,以简化客户端的代码。

2.单例模式单例模式是一种创建型模式,它确保一个类只有一个实例,并提供全局访问点来访问该实例。

单例模式可以有效地控制全局资源的使用,避免重复创建对象。

应用:单例模式通常适用于多个客户端需要共享相同的资源的情况,例如配置文件、数据库连接对象等全局性的资源。

通过使用单例模式,我们可以避免频繁创建对象,提高资源利用率。

3.装饰器模式装饰器模式是一种结构型模式,它可以在不修改原始对象的情况下,动态地为对象添加新的功能。

装饰器模式通过包装一个对象来扩展其功能,可以灵活地在运行时添加和删除功能。

应用:装饰器模式通常适用于需要动态地扩展对象功能的场景。

例如,我们可以使用装饰器模式为原本只有基本功能的类添加其他功能,例如添加日志记录、性能统计、缓存等。

4.观察者模式观察者模式是一种行为型模式,它定义了一种对象间的一对多依赖关系,使得当其中一个对象发生改变时,所有依赖它的对象都会收到通知,并自动更新。

观察者模式使得对象之间的关系更加松散,增强了对象的可重用性和可扩展性。

应用:在开发过程中,我们经常遇到需要通知其他对象状态变化的场景。

例如,当一份数据更新时,我们需要将此更新通知给其他相关的对象。

软件开发中的设计模式有哪些

软件开发中的设计模式有哪些

软件开发中的设计模式有哪些在软件开发的领域中,设计模式就像是一套经过实践检验的解决方案,帮助开发者更高效、更优雅地解决常见的问题。

它们是软件开发中的宝贵经验总结,为构建可维护、可扩展和灵活的软件系统提供了有力的支持。

接下来,让我们一起探索一下软件开发中常见的设计模式。

一、创建型设计模式1、单例模式(Singleton Pattern)单例模式确保一个类只有一个实例存在,并提供一个全局访问点来获取该实例。

这在某些情况下非常有用,比如一个系统中只需要一个数据库连接池或者一个日志记录器。

想象一下,如果多个线程同时创建多个数据库连接池实例,不仅会浪费资源,还可能导致混乱。

通过单例模式,我们可以保证只有一个实例存在,有效地管理资源。

2、工厂模式(Factory Pattern)当我们需要创建对象,但又不想让客户端直接与具体的类进行交互时,工厂模式就派上用场了。

它定义了一个用于创建对象的接口,让子类决定实例化哪一个类。

比如,在一个汽车生产厂中,有不同类型的汽车(轿车、SUV 等),我们可以通过一个工厂类根据需求来创建相应类型的汽车对象,而客户端只需要向工厂请求即可,无需关心具体的创建细节。

3、抽象工厂模式(Abstract Factory Pattern)抽象工厂模式提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

例如,一个家具厂可能生产多种风格的家具(现代风格、古典风格),每种风格都有配套的椅子、桌子和沙发。

通过抽象工厂模式,我们可以根据用户选择的风格创建一整套家具,保证了风格的一致性和协调性。

4、建造者模式(Builder Pattern)建造者模式将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

比如构建一个电脑配置,我们可以有不同的 CPU、内存、硬盘等组件选择,通过建造者模式,可以清晰地定义构建的步骤和顺序,同时能够灵活地组合不同的组件来创建出各种不同配置的电脑。

23种设计模式记忆口诀

23种设计模式记忆口诀

23种设计模式记忆口诀设计模式是软件开发中常见的解决方案模板,它们能够解决许多常见的设计问题。

为了帮助记忆23种设计模式,可以使用下面这个口诀来记忆:Creational Patterns(创建型模式):1. Singleton(单例模式):一个类能产生一个实例,全局访问。

2. Builder(建造者模式):分步骤创建复杂对象,易拓展。

3. Factory Method(工厂方法模式):子类决定实例化哪个对象。

4. Abstract Factory(抽象工厂模式):创建一组相关对象,不依赖具体类。

5. Prototype(原型模式):通过复制现有对象来创建新对象。

Structural Patterns(结构型模式):6. Adapter(适配器模式):将类的接口转换为客户端希望的接口。

7. Bridge(桥接模式):将抽象部分与实际部分分离。

将对象组合成树形结构来表示部分整体的层次结构。

9. Decorator(装饰器模式):动态地给对象添加功能。

10. Facade(外观模式):提供一个统一的接口,简化客户端使用。

11. Flyweight(享元模式):共享细粒度对象,减少内存使用。

12. Proxy(代理模式):控制对其他对象的访问。

Behavioral Patterns(行为型模式):13. Chain Of Responsibility(责任链模式):将请求的发送者和接收者解耦,多个对象都可能处理请求。

将请求封装成对象,可以用参数化方式处理。

15. Iterator(迭代器模式):提供一种遍历集合的统一接口。

16. Mediator(中介者模式):将多个对象之间的复杂关系解耦。

17. Memento(备忘录模式):将对象的状态保存起来,以后可以恢复。

18. Observer(观察者模式):当一个对象改变状态时,依赖它的对象都会收到通知。

19. State(状态模式):对象的行为随状态的改变而改变。

面向对象设计的23个设计模式详解

面向对象设计的23个设计模式详解

面向对象设计的23个设计模式详解面向对象设计是一种广泛应用于软件开发的思想,其核心在于将数据和操作封装在一起形成对象,并通过各种方式进行交互和组合,从而实现复杂的功能。

在这一过程中,设计模式起到了非常重要的作用,可以有效地提高代码的可读性、可维护性和可扩展性。

本文将对23种常见的设计模式进行详解。

一、创建型模式1.简单工厂模式简单工厂模式属于创建型模式,其目的是提供一个工厂类,使得创建对象的过程更加简单。

在这种模式中,使用者只需要提供所需对象的参数,而无需关心对象的具体实现细节。

简单工厂模式适合于对象创建过程较为简单的情况。

2.工厂方法模式工厂方法模式是简单工厂模式的进一步扩展,其核心在于将工厂类进行接口抽象化,使得不同的工厂类可以创建不同的对象实例。

工厂方法模式适合于对象创建过程较为复杂的情况。

它可以为工厂类添加新的产品类型,而不会影响原有的代码。

3.抽象工厂模式抽象工厂模式是工厂方法模式的进一步扩展,其目的是提供一个可以创建一系列相关或者独立的对象的接口。

在抽象工厂模式中,使用者只需要关心所需对象组合的类型,而无需关注对象的具体实现过程。

4.建造者模式建造者模式也是一种创建型模式,其目的在于将复杂对象分解为多个简单的部分,并将其组装起来形成复杂对象实例。

在建造者模式中,使用者只需要关注所需对象以及它们的组合方式,而无需关心对象的具体实现过程。

5.原型模式原型模式是一种基于克隆的创建型模式,其核心在于通过复制现有的对象实例来创建新的对象。

在原型模式中,对象实例的创建过程与对象所包含的状态密切相关。

原型模式适合于创建复杂对象实例,且这些对象实例之间是相对独立的情况。

二、结构型模式6.适配器模式适配器模式是一种结构型模式,其目的在于将一个类的接口转换为另一个类所能使用的接口。

在适配器模式中,使用者可以通过不同的适配器实现对象之间的互相调用。

7.桥接模式桥接模式是一种结构型模式,其目的在于将抽象部分与实现部分相互分离,从而使得两者可以独立变化。

23种设计模式范文

23种设计模式范文设计模式是软件开发中常用的解决方案模式,它们代表了在面对特定问题时的最佳实践和经验总结。

设计模式可以帮助我们更好地组织和设计代码,提高代码的可读性、可维护性和可扩展性。

在本文中,我们将介绍23种常用的设计模式,并分别讨论它们的实现原理和在实际开发中的应用场景。

1. 单例模式(Singleton Pattern)单例模式是最简单的设计模式之一,它确保一个类只有一个实例,并提供一个全局访问点。

在实现上,可以通过将构造函数私有化,然后提供一个静态方法返回实例来实现单例。

应用场景:在需要实现全局唯一访问点的场景下,比如线程池、配置管理器等。

2. 工厂模式(Factory Pattern)工厂模式是用来创建对象的一种模式,它将对象的创建和实现分离,使得代码更易于维护和扩展。

工厂模式有简单工厂模式、工厂方法模式和抽象工厂模式等几种不同的变体。

应用场景:在需要根据不同条件创建不同对象的场景下,比如数据库连接、日志记录等。

3. 抽象工厂模式(Abstract Factory Pattern)抽象工厂模式是工厂模式的一种扩展,它提供一个创建一系列相关或相互依赖对象的接口,而无需指定实际的类。

抽象工厂模式将一组工厂类封装起来,使其可以交换或者替换。

应用场景:在需要创建一组相关对象(如界面主题、操作系统等)并且需要保持一致性的场景下。

4. 建造者模式(Builder Pattern)建造者模式是用来生成复杂对象的一种模式,它将对象的构建与其表现分离,采用逐步构建的方式生成对象,可以让客户端不需要知道具体的构建细节。

应用场景:在构造过程比较复杂,需要多个组件协同工作的场景下,比如构建复杂的UI界面。

5. 原型模式(Prototype Pattern)原型模式是用来克隆对象的一种模式,它通过复制已有对象的原型来创建新的对象,避免了通过构造函数创建对象和初始化成员变量的重复过程。

应用场景:在需要创建大量相似对象或者初始化成本较高的对象时,可以使用原型模式。

软件设计-常见的23种设计模式

常见的二十三种设计模式说明工厂模式:客户类和工厂类分开。

消费者任何时候需要某种产品,只需向工厂请求即可。

消费者无须修改就可以接纳新产品。

缺点是当产品修改时,工厂类也要做相应的修改。

如:如何创建及如何向客户端提供。

建造模式:将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。

建造模式使得产品内部表象可以独立的变化,客户不必知道产品内部组成的细节。

建造模式可以强制实行一种分步骤进行的建造过程。

工厂方法模式:核心工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去做,成为一个抽象工厂角色,仅负责给出具体工厂类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。

原始模型模式:通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的方法创建出更多同类型的对象。

原始模型模式允许动态的增加或减少产品类,产品类不需要非得有任何事先确定的等级结构,原始模型模式适用于任何的等级结构。

缺点是每一个类都必须配备一个克隆方法。

单例模式:单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例单例模式。

单例模式只应在有真正的“单一实例”的需求时才可使用。

适配器(变压器)模式:把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口原因不匹配而无法一起工作的两个类能够一起工作。

适配类可以根据参数返还一个合适的实例给客户端。

桥梁模式:将抽象化与实现化脱耦,使得二者可以独立的变化,也就是说将他们之间的强关联变成弱关联,也就是指在一个软件系统的抽象化和实现化之间使用组合/聚合关系而不是继承关系,从而使两者可以独立的变化。

合成模式:合成模式将对象组织到树结构中,可以用来描述整体与部分的关系。

合成模式就是一个处理对象的树结构的模式。

合成模式把部分与整体的关系用树结构表示出来。

合成模式使得客户端把一个个单独的成分对象和由他们复合而成的合成对象同等看待。

软件设计模式

软件设计模式软件设计模式是为了解决软件设计中经常遇到的一些具有代表性的问题而总结出来的解决方案。

它们是经过验证的、被广泛应用的设计思想,可以提高软件系统的可维护性、可扩展性和可重用性。

本文将介绍一些常见的软件设计模式,并分析它们的应用场景和解决方案。

一、单例模式单例模式是一种创建型设计模式,它保证一个类只有一个实例,并提供一个全局访问点。

在实际应用中,我们经常需要创建只有一个实例的对象,比如数据库连接池、配置信息等。

通过单例模式,我们可以确保在系统中只存在一个对象实例,避免资源的浪费和重复创建。

二、工厂模式工厂模式是一种创建型设计模式,它抽象了对象的创建过程,通过一个工厂类统一实例的创建,而不需要直接调用构造函数。

工厂模式可以根据不同的参数返回不同的具体对象,增加了代码的灵活性和可扩展性。

在实际开发中,我们常常使用工厂模式来动态创建对象,达到降低代码耦合度的目的。

三、观察者模式观察者模式是一种行为型设计模式,它定义了一种一对多的依赖关系,当被观察对象的状态发生改变时,所有依赖它的对象都会收到通知并自动更新。

观察者模式可以实现对象之间的解耦,降低了系统的复杂性和耦合度。

在实际应用中,我们常常使用观察者模式来实现事件处理、UI界面更新等功能。

四、适配器模式适配器模式是一种结构型设计模式,它将一个类的接口转换成客户端所期望的另一种接口。

适配器模式可以解决不兼容接口之间的问题,使得原本由于接口不匹配而无法工作的类可以一起工作。

在实际应用中,适配器模式经常被用于现有系统的重构,以兼容新的要求。

五、策略模式策略模式是一种行为型设计模式,它定义了一系列算法,并将每个算法封装在具有共同接口的独立类中,使得它们可以互相替换。

策略模式使得算法的选择可以独立于客户端的实现,提高了代码的灵活性和可扩展性。

在实际应用中,我们常常使用策略模式来实现不同的业务逻辑处理。

六、装饰器模式装饰器模式是一种结构型设计模式,它通过动态地给一个对象添加额外的职责,而不需要修改原始对象的结构。

软件工程的设计模式

软件工程的设计模式设计模式是软件工程领域中的重要概念,它提供了一种可重用的解决方案,用于解决常见的设计问题。

设计模式使软件设计更加灵活、可维护和可扩展。

本文将介绍几种常见的软件工程设计模式。

1. 单例模式单例模式是一种创建型模式,它确保一个类只有一个实例,并提供全局访问点。

在软件开发中,有些情况下只需要一个实例即可满足需求,例如配置文件读取类、日志管理类等。

单例模式可以避免多次创建实例,节省系统资源。

2. 工厂模式工厂模式是一种创建型模式,它定义了一个创建对象的接口,但由子类决定实例化的类是哪一个。

工厂模式将对象的创建和使用分离,使系统更加灵活。

例如,可以通过工厂模式创建各种类型的产品,而无需直接访问具体产品类。

3. 观察者模式观察者模式是一种行为型模式,它定义了对象之间的一对多依赖关系,当一个对象状态发生变化时,所有依赖它的对象都会得到通知并更新。

观察者模式可以实现松耦合,增加对象之间的交互性。

例如,当某个事件发生时,可以通过观察者模式通知所有相关的观察者。

4. 适配器模式适配器模式是一种结构型模式,它将一个类的接口转换成客户端所期望的另一个接口。

适配器模式可以解决接口不兼容的问题,使得原本由于接口不匹配而无法一起工作的类能够协同工作。

例如,将不同格式的数据转换成统一的接口进行处理。

5. 策略模式策略模式是一种行为型模式,它定义了一系列算法,并将每个算法封装在可互换的策略类中。

策略模式使得算法可以独立于使用它的客户端而变化,可以动态地切换算法。

例如,一个负责支付的类可以根据不同的支付策略选择不同的支付方式。

总结设计模式是软件工程中常用的工具,可以提高代码的重用性、可读性和可维护性。

本文介绍了单例模式、工厂模式、观察者模式、适配器模式和策略模式。

当面临特定的设计问题时,可以根据需求选择合适的设计模式来解决问题。

设计模式并不是为了追求使用设计模式本身,而是为了解决特定的问题。

在实际开发中,根据需求和设计原则选择恰当的设计模式才是最重要的。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

设计模式C++学习笔记之二十(完结篇& 面向对象原则)设计模式C++实例下载摘要: Prototype(原型模式)20.1.解释概念:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

main(),客户ICloneableNow,只有一个接口CloneCMail,实体类CAdvTempl ate,说明:通过克隆的方式很快速的得到一个新的对象,然后稍微修改就是一个全新的对象了,节省了重新创建对象对资源的大量占用。

Mediator(中介者模式)21.1.解释概念:用一个中介对象来封装一系列的对象交互。

中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

main(),客户IAbstractMediator,中介者接口CMediator阅读全文posted @ 2011-04-21 22:17 wang_gary 阅读(960) | 评论(14)编辑设计模式C++学习笔记之十九(State状态模式)摘要: 19.1.解释概念:允许一个对象在其内部状态改变时改变它的行为。

对象看起来似乎修改了它的类。

main(),客户CLiftState,电梯状态抽象类CCloseingState,电梯门关闭COpenningState,电梯门打开CRunningState,电梯运行CStoppingState,电梯停止CContext,电梯的控制面板说明:CContext保持电梯的状态,并提供操作的接口函数。

当函数被调用时,CContext直接调用当前状态的相应函数。

由状态的接口函数来确定是否可以执行这个动作,以及修改状态为执行这个动作后的状态。

看代码:第一块是不使用模式的做法,第二块是使用模式的做法,在main阅读全文posted @ 2011-04-21 20:31 wang_gary 阅读(3921) | 评论(8)编辑设计模式C++学习笔记之十八(Visitor访问者模式)摘要: 18.1.解释概念:表示一个作用于某对象结构中的各元素的操作。

它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。

main(),客户IVisitor,访问者接口CBaseVisitor,访问者实现类CEmployee,被访问者抽象类CCommonEmployee,被访问者实现类之一CManager,被访问者实现类之二说明:A接受B的访问,B主动的执行访问动作。

注意:和观察者的区别是,被观察者要执行一个动作,然后主动发送通知给观察者。

访问者模式是由访问者主动发出的动作。

看代码://IVisitor. h#pragma onceclass CCommonEmployee;class CM阅读全文posted @ 2011-04-21 20:02 wang_gary 阅读(2322) | 评论(0)编辑设计模式C++学习笔记之十七(Chain of Responsibility责任链模式)摘要: 17.1.解释概念:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。

将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。

main(),客户I Women,发出请求者接口CWomen,请求者实现类CHandler,处理请求抽象类CFather,处理请求实现类,责任链之一CHusband,处理请求实现类,责任链之二CSon,处理请求实现类,责任链之三说明:CHandler抽象类负责聚合责任链之中的其它处理对象,用SetNext来建立这个责任链。

HandleMessa ge在处理请求时,会判断是否是自己要处理的请求,如果是则直接处理。

如果不是,则查找下一个责任阅读全文posted @ 2011-04-20 22:33 wang_gary 阅读(1436) | 评论(1)编辑设计模式C++学习笔记之十六(Observer观察者模式)摘要: 16.1.解释概念:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

main(),IObservable,被观察者接口CHanFeiZiObserva ble,被观察者韩非子IObserver,观察者接口CLiSiObserver,观察者李斯CZhouSiObserver观察者周斯说明:将观察者聚集到被观察者韩非子身边,韩非子的每一个举动都会通知给观察者,如李斯或周斯。

注意:最多允许一个对象既是观察者也是被观察者。

就像数据库中的触发器一样,成为一个复杂的链就很难维护了。

观察者类似于委托的处理方式。

//IObservable.h#pragma阅读全文posted @ 2011-04-20 22:21 wang_gary 阅读(4118) | 评论(0)编辑设计模式C++学习笔记之十五(Composite组合模式)摘要: 15.1.解释概念:将对象组合成树形结构以表示“部分-整体”的层次结构。

Composite使得用户对单个对象和组合的使用具有一致性。

main(),客户CCorpNode,抽象基类,实现基本信息CBra nchNode,树枝节点,实现Addordinate()函数和GetSubordinate()函数CLeafNode,叶子节点,Is Leaf属性总是“true”说明:组合模式主要是实现在CBranchNode对象里增加对其它对象的数组,如v ector<CCorpNode*>,数组里可以存放CBranchNode和CLeafNode对象。

这样方便进行遍历操作。

注意:组合模式有透明组合模式阅读全文posted @ 2011-04-19 22:34 wang_gary 阅读(1771) | 评论(0)编辑设计模式C++学习笔记之十四(Iterator迭代器模式)摘要: 14.1.解释概念:提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示。

main(),客户IProject,产品接口CProject,产品类IIterator,迭代器接口IProjectIterato r,产品迭代器接口CProjectIterator,产品迭代器实现类说明:CProject实现产品类,能够返回一个迭代器的指针。

这个迭代器将封装产品类里的一个数组。

所以迭代器在运行Next函数时,可以遍历这个数组的所有元素。

简单来说,就是用代码实现vector<int>::iterator或vector<int>::const_iterator。

我们来阅读全文posted @ 2011-04-19 21:53 wang_gary 阅读(1967) | 评论(1)编辑设计模式C++学习笔记之十三(Decorator装饰模式)摘要: 装饰模式,动态地给一个对象添加一些额外的职责。

就增加功能来说,Decorator模式相比生成子类更为灵活。

13.1.解释main(),老爸ISchoolReport,成绩单接口CFourthGradeSchoolRepor t,四年级成绩单ReportDecorator,成绩单装饰器基类HighScoreDecorator,最高分装饰器SortDec orator,班级排名装饰器说明:对“四年级成绩单”进行装饰,ReportDecorator必然有一个private变量指向ISchoolReport。

注意:看代码:// Decorator.cpp//主程序#include "stdafx阅读全文posted @ 2011-04-18 21:57 wang_gary 阅读(1745) | 评论(0)编辑设计模式C++学习笔记之十二(Command命令模式)摘要: 命令模式,将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。

应该是一个比较简单的模式了。

12.1.解释main(),客户CInvoker,命令接收者,如项目经理IGroup,执行者接口CRequirementGroup,实际执行者之一CPageGroup,实际执行者之二CCodePage,实际执行者之三ICommand,命令接口CAddRequiremen tCommand,Execute函数,将调用CRequirementGroup的多个命令。

来组合执行用户发出的命令。

CDeletePageCommand,同上... ... 其它阅读全文posted @ 2011-04-18 21:38 wang_gary 阅读(1413) | 评论(2)编辑设计模式C++学习笔记之十一(Bridge桥梁模式)摘要: 桥梁模式,将抽象部分与它的实现部分分离,使它们都可以独立地变化。

实现分离的办法就是增加一个类,11.1.解释main(),客户IProduct,产品接口CHouse,房子CIPod,ipodCClothes,服装CNewCorp,桥梁类,MakeMoney()是桥梁方法CNewHouseCorp,只能生产房子,所以构造函数是CHouse*CShanZhaiCorp,什么赚钱就生产什么,所以构造函数是IProduct*说明:客户直接使用C NewHouseCorp和CShanZhaiCorp类,在main()函数里构造产品,然后传到这两个类里。

这两个类的MakeMoney()函数,先调用基类的Ma阅读全文posted @ 2011-04-17 19:55 wang_gary 阅读(2317) | 评论(2)编辑设计模式C++学习笔记之十(Builder建造者模式)摘要: 建造者模式,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

一段晦涩难懂的文字,实现创建不同表示的方法就是给创建的过程传入创建的参数。

详细的还是看代码吧。

10.1.解释main(),客户CCarModel,产品模型CBenzModel,奔驰模型CBMWModel,宝马模型ICarBuilder,建造者接口CBenzBuilder,奔驰建造者CBMWBuilder,宝马建造者CDirector,导演说明:CCarModel实现模板方法,Builder负责开始建造产品。

建造产品时,构建的顺序由Director 或main决定。

注意:建造者模式和抽象工厂非常类似。

建造者更重视阅读全文posted @ 2011-04-15 23:05 wang_gary 阅读(2833) | 评论(0)编辑设计模式C++学习笔记之九(Template Method模板方法模式)摘要: 模板模式也是相当简单的一种模式,而且是比较常用的。

模板模式是定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。

相关文档
最新文档