yan*_*isf 5 java design-patterns decorator
在实现了装饰器模式并编写了几个装饰器之后,我注意到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);
Run Code Online (Sandbox Code Playgroud)
结果是未定义的,但API允许它.