在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#更体贴开发者,自定义事件机制还不够,还整出个委托,等等。
如果要按作者的书中所说的去搞,当发现了大量的重复代码了,再想通过重构,从而再寻找设计模式,不知到要历练到猴年马月。
在需求阶段,完成较详细的需求设计时,就应该 意识到如何使用设计模式。而要在需求阶段意识到,实践证明有效的办法之一就是 :封装变化点。 这是设计模式的灵魂。故,设计模式理解深入的作者都会把 封装变化点这一方法,列为设计模式基本原则之一。至于面向接口,而不是面向类。这一原则,有些人领悟能力低,不说了。
本人仅仅是粗浅理解,还没完全应用到复杂项目中。孙武,在年青时就写了孙子兵法一书,但却用尽一生去验证,实践。我就不再高淡阔论了,还是务实的到实践项目构思、设计、实现去验证自已的理解与领悟吧。
如果有对设计模式感兴趣的,可以私下讨论交流,或另开贴讨论。但不保证,我会随时解答,交流的,我还有许多东西要去做,要去验证。
悟性决定境界,而不是看英文书籍多与少,也不是代码重构了多长时间,也不是阅读别人的源代码,更不是忽悠就能达到。
分享到:
相关推荐
策略模式,工厂方法模式,观察者模式 例子学习资料,初学者适用
抽象工厂模式、建造模式、工厂方法模式、原型模式、单例模式、外观模式、适配器模式、桥接模式、组合模式、装饰模式、享元模式、代理模式、命令模式、解释器模式、访问者模式、迭代子模式、中介者模式、备忘录模式、...
java 三种设计模式Demo 其中对单例模式做了详细的讲解,及性能和线程安全方面的优化其中Singleton.java为经典单例模式。
最近正在学习C#中,自己做的一个基于工厂模式(包含抽象工厂)、观察者模式的小工程
主要是对javascript的面向对象思想的一个理解,有简单的单例模式,工厂模式,观察者模式含代码。
设计模式实例,java语言开发。 包括:工厂模式,观察者模式,装饰模式和桥梁模式。
抽象工厂,适配器,命令,工厂方法,观察者,代理设计模式
【例6.17】事件体系结构-观察者模式-大草原1 【例6.18】事件体系结构-观察者模式-大草原2 【例6.19】事件体系结构-观察者模式-温度显示 【例6.21】层次架构-软件测试 【例6.22】层次架构-银行- ...
用观察者模式设计一个交通信号灯调度系统,...最近看了一些Java中的设计模式,比如最简单的单例模式,抽象工厂模式,观察者模式等。在学习了这些设计模式之后,我又对之前写过的一些程序做了改进,本文贴一个交通信号灯的系统
创建型模式,共五种:工厂方法模式、抽象工厂模式、...行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
这是自己做的一个项目,里面利用了hibernate和struts2,另外也使用了观察者和工厂模式,可以运行。代码并不复杂,但整合在一起对一些网站开发很多帮助。
PHP设计模式实例之(观察者模式、策略模式、简单工厂模式)借鉴.pdf
创建型模式,共五种:工厂方法模式、抽象工厂模式、...行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
内容包括统一建模语言基础知识、面向对象设计原则、设计模式概述、简单工厂模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式、单例模式、适配器模式、桥接模式、组合模式、装饰模式、外观模式、享元模式、...
VS2019 工程实现观察者模式和工厂模式(简单工厂、工厂方法、抽象工厂)的示例源代码,具体模式讲解请参考 https://me.csdn.net/lovemengx
行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 其实还有两类:并发型模式和线程池模式。
通过swing,并利用单例模式,观察者模式以工厂模式完成的简单学生信息管理系统,设计模式课设
1 观察者模式 1 建造者模式 1 装饰模式 2 单例模式 2 门面模式 2 模板方法模式 3 策略模式 3 工厂方法模式 3 组合模式 4 抽象工厂模式 4 代理模式 4 命令模式 5 迭代器模式 5 适配器模式 5 原型模式 6 简单工厂模式 ...
行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 其实还有两类:并发型模式和线程池模式。
行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 其实还有两类:并发型模式和线程池模式。