天天看点

java装饰者模式例子

关于java装饰者模式的一个小问题。

其实我觉得装饰者和代理模式很像。这里我觉得就是代理模式。worker帮aworker把事情给做了。不过aworker的功能又不只是worker的功能,它还可以有别的功能,比如又传来一个bworker给它,它就又扩展了一种功能了。

更多追问追答

能问个问题吗?this.worker=worker这句代码怎么理解?过去比如说this.age=age,是给调用这个成员变量的对象赋值。。而这个this后的worker,是不是成员变量????如果是的话?成员变量怎么又能去调用函数呢?不应该是对象,函数名,来调用函数的吗?

呵呵,当然是成员变量了。你说的对,对象.函数名,这是调用函数的方式,可是你不是也知道么,worker就是一个对象呀。对象可以作为另一个对象的成员变量,并不是只有基础类型才能作为成员变量的,理解了么

那比如我产生一个Aworkeraworker=newAworker(plumer)。这个是怎么执行的?

是this.worker=worker是不是等价于aworker.worker=plumer;如果是这样执行的话,那这句代码怎么理解aworker.worker=plumer。。谢谢你了,我刚学java1个多星期,好难理解。

对,你的理解是对的。既然你传递了plumer,那么plumer一定是Worker这个类的对象,因为你只要这样的一个构造方法。

this.worker=worker是不是等价于aworker.worker=plumer答案是:对的。this表示当前对象。

这如何理解:就是把pumber这个对象赋给了aworker这个类的成员变量worker

最后一个问题,谢谢了。其实Worker是一个接口,Plumer是该接口的一个实现类,为啥Plumer产生的对象plumer不需要先向上转型,就直接可以作为Worker类型的参数传递Aworkeraworker=newAworker(plumer)到这里面呢?

其实,你刚接触java,不应该看设计模式。应该从基础的开始,看看视频,编编程序,多了你就能理解设计模式了。我也是这样走来的。

本回答由提问者推荐

java的i/o类中有哪些用到了装饰者模式

装饰者模式用来扩展对象的功能,给对象添加不同的功能。

在io流中,比如

BufferedReaderbufferedReader=newBufferedReader(newInputStreamReader(newFileInputStream(newFile("d:/text.txt"))));

这种对File类的包装,由内层到外层扩展输入流的功能,就是一个典型的装饰者模式。inputstream是被装饰对象,然后Fileinputstream、InputStream、BufferedReader都是它的装饰器,用来扩展它的功能!

Java的装饰模式中装饰角色已经可以扩展其它的功能,为什么还要设置一个具体装饰角色?

是可以合并的,但是不建议这样做,因为扩展需可能要多个具体装饰器角色,那么装饰器角色 就可以操作多个了,简单的说如果你1对1的情况,全部合并都没关系,但是需要应对1对多的情况告诉你个情景吧,java io

java设计模式--装饰模式传参求解