我的2007

态度决定高度,努力造就实力!

用户操作
[即时聊天] [发私信] [加为好友]
wuzhijieID:zhijie435
46962次访问,排名2360好友0人,关注者0
zhijie435的文章
原创 89 篇
翻译 0 篇
转载 123 篇
评论 7 篇
最近评论
Cheng Chi:Agree!!根据我的一些测试经验,给兄弟加点料:
在以前跟同事讨论中也谈到这个话题,不过我的题目是“How to Keep Performance test simple, and Why?”
模拟真实环境的测试是需要的,但不是必须的,最好在项目接近结束时,进行一次全面的测试,并且进行压力测试以及长时间稳定性测试。
在相对简单甚至简陋的环境中进行性能测试,可以……
fg:高压带电显示装置
LED显示屏
磁钢
磁性……
elixirzhang:请问jdbc能实现compass增量么
masterkey:不错
dongwei:返回结果怎么才能用ec:分页?求助
文章分类
收藏
    相册
    我和儿子-悠悠的照片
    java技术
    SpringSide江南白衣
    web项目经理手册
    一个大学同学的blog
    一个年轻有为但略有缺点的老板同事
    一位老领导的个人网站
    不知何人,有些文章很经典
    低头赶路,抬头看天:现在公司老总的博客
    我的java老师的blog
    此人很“牛”
    老师换地方了
    职业生涯顾问Leo的专栏
    道理事,德处人;人脉和,事脉顺-专门讨论业务建模问题(还没来得及细看)
    项目管理(其他篇)
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky

    转载 设计模式之Decorator(油漆工)收藏

    新一篇: 2006年工作总结 | 旧一篇: 设计模式之Adapter(适配器)

    装饰模式:Decorator常被翻译成"装饰",我觉得翻译成"油漆工"更形象点,油漆工(decorator)是用来刷油漆的,那么被刷油漆的对象我们称decoratee.这两种实体在Decorator模式中是必须的.

     

    Decorator定义:
    动态给一个对象添加一些额外的职责,就象在墙上刷油漆.使用Decorator模式相比用生成子类方式达到功能的扩充显得更为灵活.

    为什么使用Decorator?
    我们通常可以使用继承来实现功能的拓展,如果这些需要拓展的功能的种类很繁多,那么势必生成很多子类,增加系统的复杂性,同时,使用继承实现功能拓展,我们必须可预见这些拓展功能,这些功能是编译时就确定了,是静态的.

    使用Decorator的理由是:这些功能需要由用户动态决定加入的方式和时机.Decorator提供了"即插即用"的方法,在运行期间决定何时增加何种功能.

    如何使用?
    举Adapter中的打桩示例,在Adapter中有两种类:方形桩 圆形桩,Adapter模式展示如何综合使用这两个类,在Decorator模式中,我们是要在打桩时增加一些额外功能,比如,挖坑 在桩上钉木板等,不关心如何使用两个不相关的类.

    我们先建立一个接口:

    public interface Work
    {
      public void insert();

    }

    接口Work有一个具体实现:插入方形桩或圆形桩,这两个区别对Decorator是无所谓.我们以插入方形桩为例:

    public class SquarePeg implements Work{
      public void insert(){
        System.out.println("方形桩插入");
      }

    }

    现在有一个应用:需要在桩打入前,挖坑,在打入后,在桩上钉木板,这些额外的功能是动态,可能随意增加调整修改,比如,可能又需要在打桩之后钉架子(只是比喻).

    那么我们使用Decorator模式,这里方形桩SquarePeg是decoratee(被刷油漆者),我们需要在decoratee上刷些"油漆",这些油漆就是那些额外的功能.

    public class Decorator implements Work{

      private Work work;
      //额外增加的功能被打包在这个List中
      private ArrayList others = new ArrayList();

      //在构造器中使用组合new方式,引入Work对象;
      public Decorator(Work work)
      {
        this.work=work;
      
        others.add("挖坑");

        others.add("钉木板");
      }

      public void insert(){

        newMethod();
      }


      
      //在新方法中,我们在insert之前增加其他方法,这里次序先后是用户灵活指定的   
      public void newMethod()
      {
        otherMethod();
        work.insert();


      }

      public void otherMethod()
      {
        ListIterator listIterator = others.listIterator();
        while (listIterator.hasNext())
        {
          System.out.println(((String)(listIterator.next())) + " 正在进行");
        }

      }

    }

    在上例中,我们把挖坑和钉木板都排在了打桩insert前面,这里只是举例说明额外功能次序可以任意安排.

    好了,Decorator模式出来了,我们看如何调用:

    Work squarePeg = new SquarePeg();
    Work decorator = new Decorator(squarePeg);
    decorator.insert();

     

    Decorator模式至此完成.

    如果你细心,会发现,上面调用类似我们读取文件时的调用:

    FileReader fr = new FileReader(filename);
    BufferedReader br = new BufferedReader(fr);

    实际上Java 的I/O API就是使用Decorator实现的,I/O变种很多,如果都采取继承方法,将会产生很多子类,显然相当繁琐. 

    发表于 @ 2006年12月28日 20:30:00|评论(loading...)|编辑

    新一篇: 2006年工作总结 | 旧一篇: 设计模式之Adapter(适配器)

    评论:没有评论。

    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © zhijie435