论坛首页 综合技术论坛

对于设计模式的理解

浏览 1431 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-11-26  

        前几天,跟一同事学习,才猛然发现,自己以前写的代码都是垃圾。这个同事写代码的时候比较注重用及模式的应用!所以写出来的代码比较适用于扩展,也适用于理解,当然了,要快速理解别人的代码的话当然是要对设计模式比较熟悉。以前的自己真的没多少东西,看过的设计模式,从来没有在真正的编程中实际应用上过,都是靠感觉是就写代码了,这种情况往往导致需求变动时我们更改程序非常的痛苦。

        经过一个月的早上9点到晚上12点钟的加班历练后,猛然发现好好学习,好好看书,好好总结,好好分享,好好讨论,好好传授经验的重要。非常感谢在这一段时间的历练机会,希望这是一个转折。

        现在重新整理一下设计模式的理解,具体的模式的类图,请查看相关的书籍《Head First》或者是更简单的《大话设计模式》:

  1. 简单工厂模式(Factory):对某一相似操作(或者称算法)进行分类!适用于分类的场景,所有的分类场景都可以使用此模式进行分类。最常用的例子是什么呢?加减乘除的分类,商品打折分 类,购买蔬菜时按价格梯度进行分类等分类场景,除了在生活中,在实际的编程应用则需要举一反三了!心得:可以很好的进行分类,但每新增一类算法时需要改动原有的逻辑或者代码。
  2. 策略模式(Strategy):与简单工厂很相像!但它呢,对于用户而言,只需要了解一个类即可,而简单工厂模式必须要了解两个类。心得:将策略模 式与工厂模式结合后,则非常的美观,并且重用性也强,这也是我发现的唯一优点。在Java中,我们可以通过反射新建一个策略类的方式来作为工厂模式!个人觉得它无非是对工厂进行了简单的封装罢了!
  3. 观察者模式(Observer):主要为事件而设计,如:事件充当通知者的角色,把一批观察者挂在通知者上,通知者触发事件时调用每个观察者的监听事件。心得,每一个通知者和观察者都可以动态添加,而不影响现有的通知者和观察者。如写了ClickEvent和DbClickEvent,每一个Event下面挂了Observer对象,则在ClickEvent和DbClickEvent的调用notify()方法时,将Observer对象的相应方法都进行触发。
  4. 适配器模式(Adapter):通常是在逼不得已才用上,在双方改接口都很难的时候才进行,最好是重构统一他们的接口。
  5. 工厂方法(Factory Method):将工厂再具体抽象出来。相对于简单工厂,添加工厂类的时不需要修改原有的工厂类,符合对修改封闭,对扩展开放原则。          
  6. 抽象工厂方法(Abstract Factory) :将产品类再抽象出一层来,并且在具体的工厂类都依赖于这个类,但如果要新增加某一类产品时,除了新增的修改类,还要修改所有的工厂类。心得:事实上每一个工厂类的逻辑均是一样的,所以可以通过反射的方式,拿到类名每次去创建类即可,而无需要使用IFactory及其实现类。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics