在http://www.iteye.com/topic/1119458?page=11 中,自已稍微整理了一下这两个模式,觉得有意义,收在了本博客中。
不是大师,资质愚钝的一个人罢了。既然叫阵了,就简单抛砖引玉吧。
简单说说 工厂方法模式。 设计人员经常面对 一个具体功能的类,这个类完成具体的功能(比加 是自定义的组件有某种功能的panel),但这个类的实例生成有可能很复杂,效率还不确定,有可能需要调用配置文件,而配置文件种类格式要很多,或者外观有很多的变化。 此时,如果设计人员意识到这种情况了,注意,这里有需求变化了,就应该考虑用模式了。分析,当这个类的具体功能在这开发中是不变的,仅生成实例的具体方式要变化,怎么办?就在这里封装变化点。从生成实例给分开,把生成实例这个功能 用一个类给封装起来 ,当要生成实例时,就调用这个封装起来的类的某个方法,生成实例即可。这样当需要改变这个类的生成方式时,仅需要在生成方法所在的类中去更改,并且不影响其他地方对该类的使用。但性能或外观,或配置方式灵活性却大大的提高了。至于在生成方法中,是否还有需求变化点,不在工厂方法模式讨论之中。略去。
这就是在需求阶段设计:封装变化点。 而不是写好了整个程序,发现了有大量的重复,然后重构。而是要在软件需求功能设计时,就可以考虑进去了。
再简单说说,观察者模式,各种书中的的定义都有了,不谈实义了,同理也不谈什么UML对象与代码。但对设计人员来说,就一句最适用“一处变化,其他各处都要变化”。什么意思? 就是类A 某个属性发生变化,或某个方法执行时,其他多个类B(多个,都统称一个,即考虑一处跟随变化)要跟着相应变化。 在这种场合,就要考虑使用观察者模式了。 举个简单例子:一个设计人员在 设计一个panel,用A称呼,这个panel的位置、大小也要跟着变化,而另一个panel,用B称呼,要即时展现出A的位置大小消息,最烦人的是, 这个Panel有多种,还多个地方出现。如果是设计人员,应该意到,这里有变化了,需要把A的变化,与B的跟随变化分割并封装起来。 当然了,用观察者模式,或变形了的观者模式(严重申明,这种场合的这个模式,与GOF的观察模式有点出入)。 如何实现?最简单思想是,A调用B中方法,即A中发生变化了,直接调用B中方法。为了适应更多场合:通常引用中间类,这里称C。 使用时,A 发生变化,调用C的一个方法(称为通知方法),C又调用B的一个方法(接收方法)。当然了,使用前,C要把自已的实例 放入到A中保存起来,A在事前的状态发生变化时,要调用保存当里面的C实例的通知方法; 当然了,使用前,B要把自已的实例,放入到C实例中保存起来,事前C实例的通知方法,要调用B的接收方法。 如果仅当到此,这是一个变了样的观察者模式。
再多啰嗦几句观察者模式,这个使用的地方比较多,为了方便 ,java中出现了JavaBean的关联属性,而C#更体贴开发者,自定义事件机制还不够,还整出个委托,等等。
如果要按作者的书中所说的去搞,当发现了大量的重复代码了,再想通过重构,从而再寻找设计模式,不知到要历练到猴年马月。
在需求阶段,完成较详细的需求设计时,就应该 意识到如何使用设计模式。而要在需求阶段意识到,实践证明有效的办法之一就是 :封装变化点。 这是设计模式的灵魂。故,设计模式理解深入的作者都会把 封装变化点这一方法,列为设计模式基本原则之一。至于面向接口,而不是面向类。这一原则,有些人领悟能力低,不说了。
本人仅仅是粗浅理解,还没完全应用到复杂项目中。孙武,在年青时就写了孙子兵法一书,但却用尽一生去验证,实践。我就不再高淡阔论了,还是务实的到实践项目构思、设计、实现去验证自已的理解与领悟吧。
如果有对设计模式感兴趣的,可以私下讨论交流,或另开贴讨论。但不保证,我会随时解答,交流的,我还有许多东西要去做,要去验证。
悟性决定境界,而不是看英文书籍多与少,也不是代码重构了多长时间,也不是阅读别人的源代码,更不是忽悠就能达到。
分享到:
相关推荐
本资源主要涵盖了三种经典的设计模式:策略模式、工厂方法模式以及观察者模式,对于初学者来说是非常有价值的学习资料。 **策略模式**是一种行为设计模式,它使你能在运行时改变对象的行为。在策略模式中,一个类的...
今天我们将聚焦于其中的三种:工厂模式、单例模式和观察者模式。 **1. 工厂模式** 工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。在工厂模式中,当客户端请求创建一个产品对象时,工厂对象负责...
在这个名为"C# 工厂和观察者模式的小工程"中,我们可以深入探讨这两种模式及其在实际项目中的应用。 首先,让我们来看看工厂模式。工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式,特别是在当实例...
在实际开发中,我们可以结合其他设计模式,如工厂模式、策略模式等,来优化观察者模式的实现,提高代码的可读性和可维护性。同时,现代编程语言和框架(如React的生命周期方法、Angular的事件机制等)也内置了观察者...
抽象工厂模式、建造模式、工厂方法模式、原型模式、单例模式、外观模式、适配器模式、桥接模式、组合模式、装饰模式、享元模式、代理模式、命令模式、解释器模式、访问者模式、迭代子模式、中介者模式、备忘录模式、...
python 项目里常用的设计模式 单例模式 组合模式 策略模式 抽象工厂 代理模式 工厂模式 观察者模式简单工厂 建造者模式 模板模式 桥接多维度 桥接模式 适配器模式 外观模式 享元模式 责任链组合模式
本篇将详细讲解工厂模式和观察者模式,并通过C#语言实现的示例来帮助初学者理解这两种模式的核心概念。 1. 工厂模式: 工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式,将对象的创建过程封装起来,...
PHP 设计模式实例之观察者模式、策略模式、简单工厂模式 PHP 设计模式实例之观察者模式、策略模式、简单工厂模式是指在 PHP 编程中应用设计模式来解决实际问题的实例。设计模式是一种通用的解决方案,可以重复使用...
内容概要:本文档介绍了三个经典的软件设计模式——单例模式(Singleton Pattern)、工厂模式(Factory Pattern)以及观察者模式(Observer Pattern)的具体实现,并给出了带有详细注释的C++代码范例。对每个设计模式都有...
在实际应用中,观察者模式不仅可以用于简单的状态变更通知,还可以与其他设计模式结合,如策略模式、工厂模式等,以应对更复杂的场景。同时,Java 8引入了流(Stream)和函数式编程概念,提供了更高级的事件处理方式...
Java中的工厂模式可以分为简单工厂、工厂方法和抽象工厂三种形式,它们都致力于将对象的创建与使用分离,使得系统更具灵活性。 2. **装饰模式**: 装饰模式是一种结构型设计模式,允许动态地给一个对象添加新的...
本篇文章将深入探讨JavaScript的OOP思想,并通过实际代码示例介绍单例模式、工厂模式和观察者模式。 首先,面向对象编程的核心概念是类和对象。在JavaScript中,虽然没有传统的类定义,但可以通过构造函数来模拟类...
观察者模式和策略模式是软件设计模式中的两种重要概念,它们在解决特定问题时能提供高效、灵活的解决方案。设计模式是一种在特定情况下解决问题的通用、可重用的解决方案,是经验丰富的软件开发者们智慧的结晶。 ...
在给定的压缩包文件中,我们重点关注两种经典的设计模式:观察者模式(Observer Pattern)和工厂模式(Factory Pattern),包括简单工厂、工厂方法和抽象工厂。下面将详细介绍这两种模式及其在C++中的应用。 **观察...
本项目"Hibernate+Struts2+观察者+工厂模式实例项目"就是一个典型的Java Web开发案例,它巧妙地结合了ORM框架Hibernate、MVC框架Struts2以及设计模式中的观察者模式和工厂模式,旨在提供一种高效、易于扩展的解决...
本文将深入探讨四种常见的设计模式:单件模式(Singleton)、工厂模式(Factory)、策略模式(Strategy)和观察者模式(Observer),并以PHP语言为背景进行解释。 首先,我们来看单件模式。单件模式确保一个类只有...
同时,游戏的UI部分可以利用观察者模式,让游戏状态的变化通知到UI,实现界面的实时更新。 在实际编码中,为了提高代码的可读性和可维护性,我们还需要遵循SOLID原则,包括单一职责原则(SRP)、开闭原则(OCP)、...
观察者模式(Observer Pattern)是一种行为设计模式,它允许你定义一个订阅机制,可以在对象状态改变时通知多个“观察”该对象的其他对象。在这个"股票分析程序"中,我们很显然看到它利用了这种模式来实时更新股票...
7. **扩展与变体**:除了基础的观察者模式,还有像发布-订阅模式(Publish-Subscribe)这样的变体,它允许主题发布事件,而观察者通过订阅特定的事件来接收通知,这样可以进一步降低耦合度。 通过学习Head First的...
观察者模式和工厂模式是软件设计中两种非常重要的设计模式,它们在构建可维护、可扩展的系统中扮演着关键角色。在这个VS2019工程中,开发者使用这两种模式来展示它们的实际应用。 首先,让我们深入理解观察者模式。...