在实现了装饰器模式并编写了一对装饰器之后,我注意到API允许用户堆叠不兼容的装饰器。这是API设计者应该忍受的模式的一个自然约束,还是我自己部分的错误实现?装饰装饰器
例如,假设有一个类可以使用以二进制编码数据的二进制装饰器或使用字符串编码数据的字符串装饰器进行装饰。鉴于使用了字符串装饰器,它可能会进一步用JSON或XML装饰器进行装饰。现在很明显,在应用了JSON装饰器之后,它将不兼容于在其上使用XML装饰器,或者如果使用了二进制装饰器,则XML/JSON装饰器是没有用的。使用java.io包
Java示例:
InputStream is = someInputStream;
BufferedInputStream bis = new BufferedInputStream(is);
ObjectInputStream ois = new ObjectInputStream(bis);
DataInputStream dis = new DataInputStream(ois);
这样做的结果是不确定的,但API允许它。
为什么不能以可用的任何格式对类进行编码,具体取决于传递给编码方法的参数还是单独的方法调用本身?为什么用JSON装饰器装饰类使其与XML装饰器不兼容? – Eimantas 2011-05-27 08:07:23
好点。它可以,但在我的情况下,这将是一个编程开销。 – yannisf 2011-05-27 08:08:27