职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 501|回复: 9

我个人对装饰模式的理解

[复制链接]
已经来了吗 发表于 2011-8-26 10:35 | 显示全部楼层 |阅读模式
欢迎大牛们拍砖 也欢迎和我一样的新手 提出宝贵意见和建议 让我们在学习的道路上共同进步


个人理解如下:

首先 看一下 “装饰" 这个 字眼,但从 词性上来说 他是一个 动词 但是又可以作为一个名词(语文不好 这样说 解释词性 但愿不要误导他人)

这样在我看来 很直白的就认为 让其他的东西 去修饰 另一个东西(我更喜欢 把装饰模式 叫做 修饰模式)

理解的意思 应该就很好理解了。。。


说一句很简单的话吧"给我一个青颜色的小小的香蕉苹果"(这里所谓的香蕉,是苹果中的一个种类 类似 "红富士" 这个 品种)

这一句话中 带有了。。形容词 。。。那么"苹果" 这个名词 就是 被 "青颜色" 来修饰的 如果 转换成代码的话

应该就是一个很典型的 "装饰模式"了 。。。

代码:
Java代码  
public abstract class Apple{   
    String color;   
    String size;   
    public String getColor(){   
      return color;   
    }   
    public String getSize(){   
      return size;   
    }   
}   
//香蕉 苹果   
public class StubApple  extends Apple{   
      
}   
// 这是 " 颜色" 这个形容词 的父类 有可能是 红色的 白色的 。。。。。   
public abstract class color extends Apple{   
    public abstract String getColor();//让具体的颜色的子类 去实现吧   
}   
// 这是 " 大小" 这个形容词 的父类 有可能是 很大的 中型的 很小的 。。。。。   
public abstract class color extends Apple{   
    public abstract String getSize();//让具体的大小的子类 去实现吧   
}  

   public abstract class Apple{
       String color;
       String size;
       public String getColor(){
         return color;
       }
       public String getSize(){
         return size;
       }
   }
   //香蕉 苹果
   public class StubApple  extends Apple{
      
   }
   // 这是 " 颜色" 这个形容词 的父类 有可能是 红色的 白色的 。。。。。
   public abstract class color extends Apple{
       public abstract String getColor();//让具体的颜色的子类 去实现吧
   }
   // 这是 " 大小" 这个形容词 的父类 有可能是 很大的 中型的 很小的 。。。。。
   public abstract class color extends Apple{
       public abstract String getSize();//让具体的大小的子类 去实现吧
   }

但是请注意 不管是 颜色的子类 还是 大小的子类 。。。他们在实现Color 和 Size 这些基类的时候

都要保存 Apple 这个实例

也就是 修饰者要保存 被修饰 的对象...

在此欢迎大家 给予 指点 。。。。



yoyo 发表于 2011-8-26 10:35 | 显示全部楼层
不是我打击楼主啊..   这理解实在是惨不忍睹啊

要不你可以看一下我这篇博文http://bolide74.iteye.com/admin/blogs/1007086  下半部分有介绍装饰模式的,应该比较容易理解

当然我的这个系列博文也有介绍其他模式的,有兴趣也可以捧捧场

钰云 发表于 2011-8-26 10:36 | 显示全部楼层
bolide74 写道
不是我打击楼主啊..   这理解实在是惨不忍睹啊

要不你可以看一下我这篇博文http://bolide74.iteye.com/admin/blogs/1007086  下半部分有介绍装饰模式的,应该比较容易理解

当然我的这个系列博文也有介绍其他模式的,有兴趣也可以捧捧场

当然。。。最近正在想深入了解 spring 。。。正好看到你的有关于 spring的

讲解。非常感谢

有烟没火 发表于 2011-8-26 10:36 | 显示全部楼层
楼主你这说的是策略模式吧  和装饰没关系啊..

天上智喜 发表于 2011-8-26 10:36 | 显示全部楼层
adri1 写道
楼主你这说的是策略模式吧  和装饰没关系啊..

不是策略模式  策略是把 算法封装  这里 没有封装

其实这是这样的。。我描述的意思是把  color 或者size 这些形容词

分离出来 。。统一 实现一个 基类(这个就是 装饰者 父类 里面保存 apple这个 对象)

然后让 color size 或者未知的需求(比如 产地 品种) 这些 修饰者都实现这个 父类

可能是我 没有描述清楚。。不好意思啊。。。。





爱车车 发表于 2011-8-26 10:36 | 显示全部楼层
楼主的理解怪怪的。

紫衿 发表于 2011-8-26 10:36 | 显示全部楼层
楼主你描述的场景用策略模式没问题的...
至于装饰模式 还是看java.io吧

 楼主| 已经来了吗 发表于 2011-8-26 10:36 | 显示全部楼层
InputStream inputStream=new BufferedInputStream(new FileInputStream(new File("***")));

话说我当年 发表于 2011-8-26 10:37 | 显示全部楼层
liuyupy 写道
InputStream inputStream=new BufferedInputStream(new FileInputStream(new File("***")));

感谢这位仁兄 。。小弟已经看过 iO 了 包括NIO 。。。

随谈不上深入理解   但是理解装饰者 自认为还是 有这个实力的!!!多谢!

只学java 发表于 2011-8-26 10:37 | 显示全部楼层
这是装饰模式....我无语???
楼主还是要好好理解IO,我看你还是没有看懂。
建议看看JAVA IO一书,讲过滤流的那一张,再回来谈装饰模式吧
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-4-29 16:33 , Processed in 0.147114 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表