几种常用的设计模式介绍

合集下载

项目中常用的设计模式

项目中常用的设计模式

项目中常用的设计模式设计模式是在软件开发中经过实践验证的解决问题的经验总结,是一种被广泛应用的软件开发模式。

常用的设计模式有以下几种:1. 单例模式单例模式是一种创建型设计模式,保证一个类只有一个实例,并提供全局访问点。

在需要共享资源、控制资源访问、管理全局状态等场景下,单例模式非常有用。

2. 工厂模式工厂模式是一种创建型设计模式,定义了一个用于创建对象的接口,但具体创建哪个类的实例由子类决定。

工厂模式可以隐藏对象的创建过程,使代码更加灵活可扩展。

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

观察者模式可以实现松耦合,降低对象之间的依赖程度。

4. 装饰器模式装饰器模式是一种结构型设计模式,动态地给一个对象添加额外的职责。

装饰器模式通过创建一个包装对象来实现,包装对象和原始对象具有相同的接口,可以透明地增强原始对象的功能。

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

适配器模式可以解决不兼容接口的问题,使得原本不兼容的类可以合作无间。

6. 策略模式策略模式是一种行为型设计模式,定义了一系列算法,并将每个算法封装起来,使得它们可以互相替换。

策略模式可以使算法的变化独立于使用算法的客户端。

7. 命令模式命令模式是一种行为型设计模式,将一个请求封装成一个对象,从而使得可以用不同的请求对客户端进行参数化。

命令模式可以将请求的发送者和接收者解耦,使得系统更加灵活。

8. 迭代器模式迭代器模式是一种行为型设计模式,提供一种顺序访问集合对象元素的方法,而不需要暴露集合对象的内部表示。

迭代器模式可以隐藏集合对象的具体实现,使得访问集合对象的代码与集合对象的具体结构解耦。

9. 模板方法模式模板方法模式是一种行为型设计模式,定义了一个算法的骨架,而将一些步骤的实现延迟到子类中。

常见的二十三种设计模式

常见的二十三种设计模式

常见的⼆⼗三种设计模式按照⽬的来分,设计模式可以分为创建型模式、结构型模式和⾏为型模式。

创建型模式⽤来处理对象的创建过程;结构型模式⽤来处理类或者对象的组合;⾏为型模式⽤来对类或对象怎样交互和怎样分配职责进⾏描述。

创建型模式⽤来处理对象的创建过程,共以下五种:单例模式(Singleton Pattern)能避免同⼀对象被反复实例化。

⽐如说,访问数据库的连接对象就⽐普通对象实例化的时间要长;WCF中,维护服务器端远程对象的创建等,这类情况,很有必要⽤单例模式进⾏处理对象的实例化。

简单⼯⼚模式通过在⼯⼚类中进⾏判断,然后创建需要的功能类。

优点:不必使⽤具体的功能类去创建该类的实例。

缺点:新增⼀个功能类就需要在⼯⼚类中增加⼀个判断。

⼯⼚⽅法模式(Factory Method Pattern)把简单⼯⼚模式中的⼯⼚类,做了进⼀步的抽象为接⼝或抽象类,给各个功能创建⼀个对应的⼯⼚类,然后在这个⼯⼚类⾥⾯去创建对应的实例。

缺点:当新增⼀个功能类,就需要创建对于的⼯⼚类,相⽐简单⼯⼚模式,免去了判断创建那个具体实例,但会创建过多的类,还不如策略模式。

抽象⼯⼚模式(Abstract Factory Pattern)使⽤该功能类的功能类,利⽤抽象⼯⼚去创建该功能类的实例。

这样的好处在于尽可能的避免去创建功能的实例。

更⽜逼的做法就是使⽤反射去创建这个功能类的实例,在调⽤端就⼀点都不需要知道要去实例化那个具体的功能类。

这当然不是抽象⼯⼚模式独有的。

建造者模式(Builder Pattern)每个对象都具备⾃⼰的功能,但是,它们的创建⽅式却是⼀样的。

这个时候就需要中间这个建造者类来负责功能对象实例的创建。

在调⽤端只需调⽤特定的⽅法即可。

这个和策略模式有点类似。

原型模式(Prototype Pattern)创建好了⼀个实例,然后⽤这个实例,通过克隆⽅式创建另⼀个同类型的实例,⽽不必关⼼这个新实例是如何创建的。

原型模式使⽤时需要注意浅拷贝与深拷贝的问题。

23种设计模式及应用

23种设计模式及应用

23种设计模式及应用设计模式是指在软件设计过程中,针对常见问题的解决方案的经验总结。

它们提供了解决特定或常见问题的可重用方案,使得软件设计更加灵活、可扩展和可维护。

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

- 简单工厂模式:通过一个共同的接口创建不同的对象实例。

- 工厂方法模式:定义一个创建对象的接口,由子类决定具体创建哪个对象。

- 抽象工厂模式:提供一个创建一系列相关或互相依赖对象的接口。

- 建造者模式:将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。

2. 结构型模式:- 适配器模式:将一个类的接口转换为客户端所期待的另一种接口。

- 桥接模式:将抽象部分与它的实现部分分离,使它们可以独立变化。

- 组合模式:将对象组合成树形结构以表示"整体-部分"的层次结构。

- 装饰器模式:动态地给对象添加额外的功能,避免继承带来的类膨胀问题。

- 外观模式:为子系统中一组接口提供一个一致的界面。

3. 行为型模式:- 策略模式:定义一系列算法,将它们封装起来,并使它们可以相互替换。

- 观察者模式:定义对象之间的依赖关系,当对象状态改变时自动通知依赖方。

- 模板方法模式:定义一个操作中的算法骨架,将一些步骤延迟到子类中实现。

- 命令模式:将一个请求封装成一个对象,从而使您可以用不同的请求参数化客户端对象。

- 状态模式:允许对象在其内部状态改变时改变其行为。

4. J2EE模式:- MVC模式:将应用程序划分为三个核心组件:模型、视图和控制器。

- 业务代表模式:将对业务对象的访问和业务逻辑从表示层分离出来。

- 数据访问对象模式:用于将业务逻辑和数据访问逻辑分离。

- 前端控制器模式:通过一个单一的入口点来处理应用程序的所有请求。

- 传输对象模式:用于在客户端和服务器之间传输数据。

5. 并发模式:- 线程池模式:创建一组预先初始化的线程对象来处理任务。

常见设计模式及应用场景

常见设计模式及应用场景

常见设计模式及应用场景设计模式是一组指南和最佳实践,用于帮助开发人员创建高质量、可维护和可重用的软件。

它们描述了在不同领域中的软件设计中常见的问题和解决方案,例如面向对象编程、软件架构和用户界面设计。

以下是一些常见的设计模式及其应用场景:1. 单例模式:用于确保一个类仅有一个实例,并提供全局访问点。

适用于需要确保实例只有一个的情况,例如日志类、配置信息类等。

2. 工厂模式:用于创建对象的模式,根据不同的条件返回不同的实例。

适用于需要创建多种不同对象的情况,例如创建不同的用户角色、订单状态等。

3. 建造者模式:用于创建对象的模式,提供一种方法来逐步构建对象。

适用于需要创建复杂的对象结构的情况,例如建筑工程、软件开发项目等。

4. 观察者模式:用于处理对象之间的观察者关系,当一个对象发生变化时,所有依赖它的对象都会更新。

适用于需要处理对象之间依赖关系的情况,例如客户关系管理系统、音乐播放器等。

5. 适配器模式:用于将一个类的接口转换成客户希望的另一个接口。

适用于需要将不同类型的数据转换为不同的格式的情况,例如将 JSON 数据转换为 XML 数据、将 CSV 数据转换为 Excel 数据等。

6. 装饰器模式:用于动态地给一个对象添加一些额外的职责。

适用于需要动态地增加对象的功能的情况,例如动态增加日志记录功能、动态增加缓存功能等。

7. 策略模式:用于定义一系列算法,将它们一个个封装起来,并使它们可以互相替换。

适用于需要定义多种算法的情况,例如用户认证策略、文件压缩策略等。

8. 模板方法模式:用于将一个复杂方法分解成的简单方法的封装。

适用于需要将一个复杂方法分解成多个简单方法的情况,例如将一个复杂的 SQL 查询语句分解成多个简单的查询语句。

9. 命令模式:用于处理请求 - 响应模型的模式,允许客户端请求一个命令,并使该命令执行。

适用于需要处理请求 - 响应模型的情况,例如管理系统消息、发送电子邮件等。

几种常见的教学设计模式及其比较

几种常见的教学设计模式及其比较

几种常见的教学设计模式及其比较教学设计模式是指在课程教学过程中,教师根据教学目标和学生特点,灵活运用教学方法、策略、资源等,有针对性地设计教学活动和任务的一种模式。

常见的教学设计模式主要包括问题解决模式、探究模式、合作学习模式和分层教学模式等。

下面将对这几种常见的教学设计模式进行比较。

一、问题解决模式问题解决模式是一种以问题为导向的教学模式,教师们通过引导学生自主探索、质疑和解决问题的方式,激发学生的学习兴趣和动力。

这种模式强调学生的主体地位,培养学生的创造思维和独立解决问题的能力。

在这个模式下,教师的角色是鼓励者、引导者和评价者。

但是问题解决模式也存在一些问题,如学生在解决问题的过程中可能会遇到困惑,需要教师及时的指导和帮助。

二、探究模式探究模式是指教师通过设置情境、触发学生思考、讨论和实验等方式,引导学生主动探索和发现知识的模式。

这种模式注重培养学生的探索精神和问题解决能力,使学生在探索中获得知识和技能。

在这个模式下,教师的角色是设计者、引导者和指导者。

探究模式的优势是能够激发学生的兴趣和主动性,但也存在一些挑战,如学生可能会迷失在探究的过程中,需要教师进行引导和监控。

三、合作学习模式合作学习模式是一种以小组为单位,学生在小组内进行共同学习、合作探究和解决问题的教学模式。

这种模式强调学生之间的互动和合作,培养学生的团队精神和协作能力。

在这个模式下,教师的角色是组织者、协调者和指导者。

合作学习模式能够促进学生的互助互补和共同进步,但也需要注意小组合作的平衡和效果。

四、分层教学模式分层教学模式是一种根据学生的差异性,将学生分为不同层次,进行个性化教学的模式。

这种模式注重因材施教,根据学生的特点和需求进行有针对性的教学安排。

在这个模式下,教师的角色是组织者、指导者和评价者。

分层教学模式能够满足不同学生的需求,帮助学生取得更好的学习效果,但也需要教师投入更多的时间和资源。

综上所述,不同的教学设计模式都有其独特的优势和适用场景。

编程中的设计模式:8个常见模式解析

编程中的设计模式:8个常见模式解析

编程中的设计模式:8个常见模式解析设计模式是软件开发中常见的一种解决问题的思想模式,它是一种经过多次实践总结出来的在特定情境下,对特定问题的解决方案。

设计模式通过将经典的经验进行抽象,然后形成模式来指导软件开发工程师进行设计和开发。

下面将介绍8个常见的设计模式。

1.工厂模式(Factory Pattern)工厂模式是一种创建型模式,用于创建对象的过程中隐藏了具体的实现细节,只暴露了一个工厂类的接口。

工厂模式可以根据不同的参数或条件,动态地返回不同的具体对象,达到解耦的效果,提高了代码的灵活性和可维护性。

2.单例模式(Singleton Pattern)单例模式是一种创建型模式,保证一个类只有一个实例,并提供全局访问点,同时对外部隐藏了具体的创建过程。

单例模式可以用于实现全局资源的管理,例如线程池、数据库连接等,避免了资源的创建和销毁过程中的开销问题。

3.观察者模式(Observer Pattern)观察者模式是一种行为型模式,定义了一种一对多的依赖关系,使得当一个对象的状态发生变化时,其相关依赖对象都能够得到通知和更新。

观察者模式可以实现松耦合的通信方式,增加了对象之间的交互性,提高了系统的可扩展性和可维护性。

4.策略模式(Strategy Pattern)策略模式是一种行为型模式,定义了一系列算法或行为,将它们封装起来并可以相互替换。

策略模式使得算法的变化不会影响到调用算法的客户端,提高了代码的可复用性和可维护性。

5.装饰器模式(Decorator Pattern)装饰器模式是一种结构型模式,可以动态地给一个对象添加一些额外的职责,而无需对原始对象进行修改。

装饰器模式通过组合的方式,将一系列装饰器对象包裹在被装饰对象的外部,从而在运行时动态地扩展对象的功能。

6.适配器模式(Adapter Pattern)适配器模式是一种结构型模式,用于将一个类的接口转换成客户端所期望的接口。

适配器模式中,适配器类是作为两个不兼容的接口之间的桥梁,将一个类的接口转换成另一个接口,从而可以让它们能够正常地协同工作。

23种设计模式范文

23种设计模式范文

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

23种设计模式 详解

23种设计模式 详解

23种设计模式详解设计模式是指面向对象编程中,经过多次验证、被广泛接受的代码实现方法。

这些设计模式可以帮助开发者更快地解决问题,提高代码的可读性、可维护性、可扩展性。

目前,常用的设计模式有23种。

下面,我们来详细介绍一下这23种设计模式。

1. 单例模式(Singleton)单例模式是一种只允许生成一个实例的模式。

在实例化对象时,单例模式的生成过程比较特殊,需要先判断该类是否已经实例化过,如果已经实例化,则直接返回已有的实例对象,否则再进行实例化。

2. 工厂模式(Factory)工厂模式是一种生产对象实例的设计模式。

它将对象实例的生成过程封装在一个工厂类中,客户端需要对象时,只需要调用工厂类中对应的方法即可。

3. 抽象工厂模式(Abstract Factory)抽象工厂模式是一种扩展了工厂模式的模式。

它可以生成一系列相关或相互依赖的对象实例。

具体实现时,通常需要定义一个抽象工厂类和一些具体工厂类,来生产各种相关的对象实例。

4. 建造者模式(Builder)建造者模式是一种用于构建复杂对象的模式。

它将一个复杂对象的构建过程分解成多个简单的步骤,然后通过一个指挥者来管理这些步骤的执行,最终构建出一个复杂的对象。

5. 原型模式(Prototype)原型模式是一种通过复制已有对象来创建新对象的模式。

一般来说,系统中的对象包含大量相同或相似的部分,通过复制对象可以帮助我们节省生成对象的时间和资源。

6. 适配器模式(Adapter)适配器模式是一种将不兼容接口转换为兼容接口的模式。

具体实现时,需要定义一个适配器类,该类实现了客户端所期望的接口,而且还包装了原有不兼容的接口,使其能够兼容客户端期望的接口。

7. 桥接模式(Bridge)桥接模式是一种将抽象部分与其实现部分分离开来的模式。

具体实现时,需要定义抽象部分和实现部分的接口,然后定义一个桥接类,将抽象部分和实现部分联系起来。

8. 组合模式(Composite)组合模式是一种将具有相同属性和方法的对象组合成树形结构的模式。

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

几种常用的设计模式介绍
1. 设计模式的起源
最早提出“设计模式”概念的是建筑设计大师亚力山大Alexander。

在1970年他的《建筑的永恒之道》里描述了投计模式的发现,因为它已经存在了千百年之久,而现代才被通过大量的研究而被发现。

在《建筑的永恒之道》里这样描述:模式是一条由三个部分组成的通用规则:它表示了一个特定环境、一类问题和一个解决方案之间的关系。

每一个模式描述了一个不断重复发生的问题,以及该问题解决方案的核心设计。

在他的另一本书《建筑模式语言》中提到了现在已经定义了253种模式。

比如:
说明城市主要的结构:亚文化区的镶嵌、分散的工作点、城市的魅力、地方交通区
住宅团组:户型混合、公共性的程度、住宅团组、联排式住宅、丘状住宅、老人天地室内环境和室外环境、阴和阳总是一气呵成
针对住宅:夫妻的领域、儿童的领域、朝东的卧室、农家的厨房、私家的沿街露台、个人居室、起居空间的序列、多床卧室、浴室、大储藏室
针对办公室、车间和公共建筑物:灵活办公空间、共同进餐、共同小组、宾至如归、等候场所、小会议室、半私密办公室
尽管亚力山大的著作是针对建筑领域的,但他的观点实际上适用于所有的工程设计领域,其中也包括软件设计领域。

“软件设计模式”,这个术语是在1990年代由Erich Gamma等人从建筑设计领域引入到计算机科学中来的。

目前主要有23种。

2. 软件设计模式的分类
2.1. 创建型
创建对象时,不再由我们直接实例化对象;而是根据特定场景,由程序来确定创建对象的方式,从而保证更大的性能、更好的架构优势。

创建型模式主要有简单工厂模式(并不是23种设计模式之一)、工厂方法、抽象工厂模式、单例模式、生成器模式和原型模式。

2.2. 结构型
用于帮助将多个对象组织成更大的结构。

结构型模式主要有适配器模式、桥接模式、组合器模式、装饰器模式、门面模式、亨元模式和代理模式。

2.3. 行为型
用于帮助系统间各对象的通信,以及如何控制复杂系统中流程。

行为型模式主要有命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板模式和访问者模式。

3. 常见设计模式介绍
3.1. 单例模式(singleton)
有些时候,允许自由创建某个类的实例没有意义,还可能造成系统性能下降。

如果一个类始终只能创建一个实例,则这个类被称为单例类,这种模式就被称为单例模式。

单例模式主要有如下两个优势:
1)减少创建Java实例所带来的系统开销
2)便于系统跟踪单个Java实例的生命周期、实例状态等。

3.2. 简单工厂(StaticFactory Method)
简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。

简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。

A实例调用B实例的方法,称为A依赖于B。

如果使用new关键字来创建一个B实例(硬编码耦合),然后调用B实例的方法。

一旦系统需要重构:需要使用C类来代替B类时,程序不得不改写A类代码。

而用工厂模式则不需要关心B对象的实现、创建过程。

使用简单工厂模式的优势:让对象的调用者和对象创建过程分离,当对象调用者需要对象时,直接向工厂请求即可。

从而避免了对象的调用者与对象的实现类以硬编码方式耦合,以提高系统的可维护性、可扩展性。

工厂模式也有一个小小的缺陷:当产品修改时,工厂类也要做相应的修改。

3.3. 工厂方法(Factory Method)和抽象工厂(Abstract Factory)
如果我们不想在工厂类中进行逻辑判断,程序可以为不同产品类提供不同的工厂,不同的工厂类和产不同的产品。

当使用工厂方法设计模式时,对象调用者需要与具体的工厂类耦合,如:
使用简单工厂类,需要在工厂类里做逻辑判断。

而工厂类虽然不用在工厂类做判断。

但是带来了另一种耦合:客户端代码与不同的工厂类耦合。

为了解决客户端代码与不同工厂类耦合的问题。

在工厂类的基础上再增加一个工厂类,该工厂类不
3.4. 代理模式(Proxy)
代理模式是一种应用非常广泛的设计模式,当客户端代码需要调用某个对象时,客户端实际上不关心是否准确得到该对象,它只要一个能提供该功能的对象即可,此时我们就可返回该对象的代理(Proxy)。

Hibernate默认启用延迟加载,当系统加载A实体时,A实体关联的B实体并未被加载出来,A实体所关联的B实体全部是代理对象——只有等到A实体真正需要访问B实体时,系统才会去数据库里抓取B实体所对应的记录。

借助于Java提供的Proxy和InvocationHandler,可以实现在运行时生成动态代理的功能,而动态代理对象就可以作为目标对象使用,而且增强了目标对象的功能。

如:
MyProxyFactory,创建代理对象
Spring所创建的AOP代理就是这种动态代理。

但是Spring AOP更灵活。

3.5. 命令模式(Command)
某个方法需要完成某一个功能,完成这个功能的大部分步骤已经确定了,但可能有少量具体步骤无法确定,必须等到执行该方法时才可以确定。

(在某些编程语言如Ruby、Perl里,允许传入一个代码块作为参数。

但Jara暂时还不支持代码块作为参数)。

在Java中,传入该方法的是一个对象,该对象通常是某个接口的匿名实现类的实例,该接口通常被称为命令接口,这种设计方式也被称为命令模式。

如:
Command
HibernateTemplate使用了executeXxx()方法弥补了HibernateTemplate的不足,该方法需要接受一个
3.6. 策略模式(Strategy)
策略模式用于封装系列的算法,这些算法通常被封装在一个被称为Context的类中,客户端程序可以自由选择其中一种算法,或让Context为客户端选择一种最佳算法——使用策略模式的优势是为了支持算法的自由切换。

DiscountStrategy,折扣方法接口
OldDiscount,旧书打折算法
VipDiscount,VIP打折算法
策略定义
测试
需要和不同的策略耦合。

为了弥补这个不足,我们可以考虑使用配置文件来指定DiscountContext使用哪种打折策略——这就彻底分离客户端代码和具体打折策略类。

3.7. 门面模式(Facade)
随着系统的不断改进和开发,它们会变得越来越复杂,系统会生成大量的类,这使得程序流程更难被理解。

门面模式可为这些类提供一个简化的接口,从而简化访问这些类的复杂性。

门面模式(Facade)也被称为正面模式、外观模式,这种模式用于将一组复杂的类包装到一个简单的外部接口中。

原来的方式
3.8. 桥接模式(Bridge)
由于实际的需要,某个类具有两个以上的维度变化,如果只是使用继承将无法实现这种需要,或者使得设计变得相当臃肿。

而桥接模式的做法是把变化部分抽象出来,使变化部分与主类分离开来,从而将多个的变化彻底分离。

最后提供一个管理类来组合不同维度上的变化,通过这种组合来满足业务的需要。

Peppery口味风格接口:
材料之一,继承口味
Java EE应用中常见的DAO模式正是桥接模式的应用。

实际上,一个设计优良的项目,本身就是设计模式最好的教科书,例如Spring框架,当你深入阅读其源代码时,你会发现这个框架处处充满了设计模式的应用场景。

3.9. 观察者模式(Observer)
观察者模式定义了对象间的一对多依赖关系,让一个或多个观察者对象观察一个主题对象。

当主题对象的状态发生变化时,系统能通知所有的依赖于此对象的观察者对象,从而使得观察者对象能够自动更新。

在观察者模式中,被观察的对象常常也被称为目标或主题(Subject),依赖的对象被称为观察者(Observer)。

Observer,观察者接口:
Product被观察类:
测试:
其中Java工具类提供了被观察者抽象基类:java.util.Observable。

观察者接口:java.util.Observer。

我们可以把观察者接口理解成事件监听接口,而被观察者对象也可当成事件源处理——换个角度来思考:监听,观察,这两个词语之间有本质的区别吗?Java事件机制的底层实现,本身就是通过观察者
模式来实现的。

除此之外,主题/订阅模式下的JMS本身就是观察者模式的应用。

第21页,共21页。

相关文档
最新文档