- 浏览: 194469 次
- 性别:
- 来自: 厦门
文章分类
最新评论
-
行者买刀:
qxpidt 写道楼主,我想问下,嵌套这些WEB应用后,如何操 ...
JDIC一个能够用java调用ie内核的包 -
qxpidt:
楼主,我想问下,嵌套这些WEB应用后,如何操作你登录的COOK ...
JDIC一个能够用java调用ie内核的包 -
lookforwarding:
...
java重写JSplitPane的UI,设置分隔条的颜色 -
v韧竹v:
最后那个抽象工厂模式,CarType是不是定义错了,应该abs ...
设计模式之略见一斑(工厂模式Factory) -
l7810:
这与模板模式有什么区别啊?
设计模式之略见一斑(建造模式builder)
标头:(引自设计模式)
为了扩展代码库,通常给它添加新类或者新方法。有时候,你也许不希望在运行时候使用新行为来组合对象。Interpreter模式允许你组合可执行对象,这个对象的行为可能变化会非常快。在有些情况下,你也许需要行为上的小变化,并且希望能够把这些变化事例起来,decorator模式可以满足这个需求。
decorator的意图就是在运行时组合操作的新变化
以经典例子IO流为例:
java类库里输入/输出流就是一个典型的decorator模式的例子,流是一系列比特或者字符的集合,比如文档中出现的字符集合。在java中,writer是支持流的一个方法,有些输出器(writer)类的构造器的参数可以是其他输出器,这样可以基于其他输出器来创建输出器.这种组合就是decorator模式的结构。
让我们来举个例子,看看如下代码,它创建一个小的文本文件:
public class ShowDecorator { public static void main(String[] args) { try { FileWriter write = new FileWriter("c://test.txt"); BufferedWriter bw = new BufferedWriter(write); bw.write("hello,LGH ,my name is Liuguohua"); bw.close(); write.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
运行这个程序,我们会得到一个test.txt 文件,其中包含一部分示范文字,本程序使用FileWriter对象来创新新文件,把这个对象包容在BufferedWriter中。需要注意的一个地方是我们可以从一个流组合另一个流,这部分代码从某FileWriter对象组合得到一个BufferedWriter对象。
一个很平常的应用,我们想要对用户每次输入的数据或者想对一个文本数据进行过滤等,这个时候可以开发个过滤器集合,通过选择已经存在的writer类中的操作,可以创建继承自Writer类所有行为的一个类
下面的图展示了设计思路:
1) SuperWriter继承了Writer所有的功能
2)我们这里只假设需要对用户输入字母变成小写,所以重写了方法write(char[],off:int,len:int)
3)除了方法writer(:int)及write(char[],off:int,len:int),其它方法采用默认实现
SuperWriter:
public abstract class SuperWriter extends Writer{ protected Writer out; protected SuperWriter(Writer out){ super(out); this.out = out; } }
这部分代码比较简单,只是简单继承Writer.
DecoratorWriter:
public abstract class DecoratorWriter extends SuperWriter{ public DecoratorWriter(Writer out){ super(out); } @Override public void write(String s){ char[] cs = s.toCharArray(); for(char cc:cs){ write(cc); } } public abstract void write(int c); @Override public void close() throws IOException { // TODO Auto-generated method stub out.close(); } @Override public void flush() throws IOException { // TODO Auto-generated method stub out.flush(); } @Override public void write(char[] cbuf, int off, int len) throws IOException { // TODO Auto-generated method stub for(int i =off;i<len;i++){ write(cbuf[i]); } } }
该类为抽象类,提供除wirte(:int)方法以后的默认实现,其子类必须实现write(:int),对数据进行相应的操作。
现在,我们可以容易的创建和使用新的装饰模式过滤器,比如,如下类的功能就是把所有的字母转换成小写形式:
public class LowerCaseWriter extends DecoratorWriter{ public LowerCaseWriter(Writer out){ super(out); } @Override public void write(int c) { // TODO Auto-generated method stub try { out.write(Character.toLowerCase(c)); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void main(String[] args) { try { LowerCaseWriter caseWriter = new LowerCaseWriter(new FileWriter("c://hah.txt")); caseWriter.write("HELLO,LGH,hello lgh"); caseWriter.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
程序会把文本“hello,lgh,hello lgh”,输出到文本里。
相应的我们可以写一个把所有字母转换成大写形式等等。
原因:
我们为什么要这样写呢,一个是复用,使代码看起来整洁一个就是功能多样化,如果只想在一个类里实现这些功能,不仅会使代码变得很庞大难以维护,同时如果想要每种类都有这种功能的话,我们必须通过继承的方式,否会只会作茧自缚.
评论
装饰者模式,从定义上说就是 动态的把一个特殊的个性的责任放到一个对象上,
如果使用继承做也可以,但是数量级上去后必然会早成类爆炸,可变性也必然会影响OCP的初衷。
装饰者是巧妙的使用继承来来达到这个效果, 装饰者中使用继承不是为了扩展和附加责任,而是为了获取类型的一致即多态,这应该属于对继承的一个技巧性的使用
基类接口,
待包装类 装饰者接口
具体的装饰者
装饰者接口从基类继承后获取和待包装类的类型上的一致,然后具体的装饰者中使用组合(这边才正式应用了,多用组合少用继承的原则)组合待包装类,并将自身的责任或者行为包装给待包装类的具体的方法。
经常看到一个追MM装饰者模式,我觉得说的很好。
说有一MM过生日,于是男朋友给他买了蛋糕,但总不能直接拿过去,蛋糕总要装饰一下才行。于是一个被包装的漂漂亮亮的蛋糕就出现了。这就是装饰模式了。
当然headfirst出版的设计模式是本好书,但并不一定适合所有的读者。
如果连headfirst的书都看不懂,那也就还没到搞设计模式的火候,如果认为那本书讲的太浅显的,从你的说明中也不会得到什么。
headfirst设计模式本书确实如你所述,很通俗易懂。
但就像
大家都喜欢听歌,大部分目的为了娱乐心情,但总不能说你喜欢听张三的歌,认为张三唱的境界最高,没听懂他的歌就达不到听歌的境界。没有听懂张三的歌,别的也不用听了。
ps:如果你对于设计模式你有更好的理解,可否分享一下。
再次,设计模式实乃个人之略见一斑,其深,其广,有待去从更多的实践中得到启发。
当然headfirst出版的设计模式是本好书,但并不一定适合所有的读者。
如果连headfirst的书都看不懂,那也就还没到搞设计模式的火候,如果认为那本书讲的太浅显的,从你的说明中也不会得到什么。
当然headfirst出版的设计模式是本好书,但并不一定适合所有的读者。
发表评论
-
UtilCommon
2016-08-16 07:23 0aaaaaa -
Java面试题全集(上)
2016-08-14 17:23 0版权声明:本文为博 ... -
设计模式之略见一斑(Visitor访问者模式)
2010-02-25 15:02 3229在开发中,我们可能会经常碰到客户提了一新的需求,那么在现 ... -
设计模式之略见一斑(Mediator中介者模式)
2010-02-25 10:07 1882设计模式 写道 通常,面向对象的软件开发要求尽可能 ... -
设计模式之略见一斑(Chain of Responsibility责任链模式)
2010-02-24 15:00 1497设计模式 写道 面向对 ... -
设计模式之略见一斑(Observer观察者模式)
2010-02-23 17:15 2210用户通常通过调用对象的方法来收集该对象的信息。但是当这 ... -
设计模式之略见一斑(Memento备忘录模式)
2010-02-23 11:46 1463有时候,我们需要 ... -
设计模式之略见一斑(Template Method模板方法模式)
2010-02-22 21:33 1441模板方法模式就是预 ... -
设计模式之略见一斑(策略模式strategy)
2010-02-22 17:56 1971java设计模式 写道 ... -
设计模式之略见一斑(状态模式State)
2010-02-22 15:42 1697设计模式中的状态模式相对比较简单,简单的说就是对某 ... -
设计模式之略见一斑(解释器模式Interpreter)
2010-02-22 10:27 3389解释器模式是 ... -
设计模式之略见一斑(命令模式Command)
2010-02-22 09:49 1557终于把构造模式的几种设计模式写完,接下来开始写的行为模 ... -
设计模式之略见一斑(享元模式flyweight)
2010-02-10 11:39 1439flyweight模式中文解释为轻量极模式,所以顾名 ... -
设计模式之略见一斑(代理模式Proxy)
2010-02-10 11:04 1967普通对象所需要完成的任务就是通过公共接口为外界提供自己所承诺的 ... -
设计模式之略见一斑(组合模式Composite)
2010-02-08 14:45 1500定义: 将对象以树形结构组织起来,以达成"部 ... -
设计模式之略见一斑(外观模式Facade)
2010-02-07 09:30 1392外观模式又称门面模式,它是为了给子系统中提供一个一致的界面,从 ... -
设计模式之略见一斑(桥梁模式bridge)
2010-02-06 18:04 1561桥梁模式的宗旨就是将 ... -
设计模式之略见一斑(适配器模式Adapter)
2010-02-03 10:39 1607适配器模式就是基于客户提供的接口和功能,再此基础上实 ... -
设计模式之略见一斑(原型模式Prototype)
2010-02-01 17:15 1700原型模式允许一个对象 ... -
设计模式之略见一斑(建造模式builder)
2010-02-01 16:18 1765建造模式是将复杂的 ...
相关推荐
《21种设计模式略见一斑》这篇文章和配套的"行者买刀21种设计模式详解.pdf"文件,是面向IT专业人士,尤其是软件开发者的一份珍贵资源,旨在深入理解并掌握软件设计中的核心概念——设计模式。设计模式是经验丰富的...
在软件开发中,设计模式是解决常见问题的模板,它们为程序员提供了一种标准化的解决方案,使得代码更易于理解和维护。本篇文章将深入探讨“Observer”观察者模式,这是一种行为设计模式,它定义了对象之间的一对多...
CRC的全称为Cyclic Redundancy Check,中文名称为循环冗余校验。它是一类重要的线性分组码,编码...例如我们读软盘上的文件,以及解压一个ZIP文件时,偶尔会碰到“Bad CRC”错误,由此它在数据存储方面的应用可略见一斑
6. 略见一斑:从一点细微之处就能看出整体的情况或品质。 7. 班门弄斧:在专家面前卖弄自己的技能,暗示自不量力。 8. 英雄辈出:形容一个时代或群体中不断涌现出杰出的人物。 9. 并行不悖:两件事物同时进行而互不...
10. **略见一斑**:形容从局部可以推测到整体的一部分情况。 11. **有口皆碑**:形容人们对某人或某事的赞扬之声普遍且一致。 12. **并行不悖**:两个或多个事情可以同时进行,彼此之间并不冲突。 13. **白璧微瑕**...
报告的核心内容可从提供的“部分内容”中略见一斑,以下是对报告内容的详细解读: 一、企业竞合策略概述 报告首先介绍了避雷器行业竞合策略研究的背景、研究原则与方法,并阐述了研究企业竞合策略的重要性和实践...
1. 语文基础知识:题目涉及到词语辨析,如“心酸”与“辛酸往事”,“一般”与“略见一斑”,“过度”与“过渡时期”,“无谓”与“无私无畏”,“家世”与“处理家事”,“明智”与“淡泊明志”,“灌注”与...
12. "略见一斑"(lüè jiàn yī bān):从部分看出整体,通过局部了解全局。 13. "暴虎冯河"(bào hǔ píng hé):形容有勇无谋,冒险行事。 14. "有口皆碑"(yǒukǒu jiē bēi):形容人人称赞,具有很高的...
《现场活动大屏幕系统v1.1806221》是一款专为现场活动设计的多媒体展示系统,它的核心功能在于提供一个高效、稳定且易于操作的大屏幕展示平台。这款系统能够帮助活动组织者在活动现场实时展示各种信息,如活动进程、...
- (3) "我当时的想法,从这几段文字中也可以看出一点" 可以替换为 "言外之意,略见一斑"。 2. 动词填空: - ① "暗夜渐渐__上天空,__上对面的屋顶" 可以填入 "爬上,爬满",表达夜晚降临的情景。"一切都__在朦胧...
4. **黯然失色**:形容相比之下显得差远了,不如别人。同义词有“相形见绌”、“大相径庭”。反义成语如“光彩夺目”、“不相上下”。 5. **慷慨激昂**:形容精神振奋,情绪高昂,充满正气。同义词有“热血沸腾”、...
10. **略见一斑**:从局部看出事物的一部分特征,了解其大概。 11. **有口皆碑**:所有人都称赞,形容事迹或人品受到普遍赞扬。 12. **并行不悖**:两件事情可以同时进行,互不冲突。 13. **白璧微瑕**:完美的事物...
《爱的教育》的影响力之广泛,从它的翻译版本就能略见一斑。作为一部文学作品,它跨越国界和文化,成为全人类的精神财富。通过阅读《争吵》,学生不仅能够提升自己的语言表达能力,更能在情感和道德上得到深刻的教育...
"略见一斑"意味着事情的端倪已经显现,“光明灿烂”和“辉煌”均形容美好前景,但前者更侧重于未来的可能性,后者侧重于实际的辉煌成就。因此,选B:希望光明,光明璀璨。 8. 经济形势描述:第八题中,“内热外冷”...
- 《红楼梦》是中国古代四大名著之一,属于章回体小说,现有120回,前80回由曹雪芹创作,后40回一般认为是高鹗续写。曹雪芹,原名霑,字梦阮。《红楼梦》以贾、史、王、薛四大家族的兴衰为背景,以贾宝玉和林黛玉的...
10. **略见一斑**:通过部分了解整体,形容对事物的初步认识。 11. **有口皆碑**:所有人都称赞,表示对某人或某事的普遍好评。 12. **并行不悖**:两件事情同时进行,并不互相冲突。 13. **白璧微瑕**:比喻美好的...
例如,我们读软盘上的文件,以及解压一个 ZIP 文件时,偶尔会碰到“Bad CRC”错误,由此它在数据存储方面的应用可略见一斑。 CRC 的优点 CRC 的优点在于编码和解码方法简单,检错和纠错能力强,在通信领域广泛地...
题目2考察学生对汉字书写的准确性,如"烦燥"应为"烦躁"、"甜言密语"应为"甜言蜜语"、"颓垣"、"略见一班"应为"略见一斑"、"莫钟一是一言既出,驷马难追"中"莫钟一是"可能是错误,正确可能是"莫衷一是"。 3. 成语运用...
3. 字形校正:题目中还包含了错别字的纠正,如A项中的“烦燥”应为“烦躁”,“甜言密语”应为“甜言蜜语”,B项中的“半响”应为“半晌”,“略见一班”应为“略见一斑”,C项中的“脉膊”应为“脉搏”,“歪风斜气...