以下是我的测试代码。情况是:我尝试创建一个允许附加许多装饰器的视图,例如滚动条,额外的子视图,backgroundColor,这个视图上的特殊效果等等。问题是我发现i1
和i2
不是真正的我需要,我需要的是whatINeed1
和whatINeed2
。在这种情况下,i1
和i2
有什么意义。在这种情况下,它们不会像发电机一样吗?如何在这种情况下使用装饰设计?
在许多地方,语法可能是错误的,因为我在objective-c中测试过,但在线复制和定制了java示例代码。
如果我从一开始就错了,请您指出!
public class Decorator {
abstract class I implements DefaultView { I render(); }
static class A implements I { public I render() { System.out.print('A'); } }
static abstract class D implements I {
private I core;
public D(I inner) { core = inner; }
public I render() { return core.render(); }
}
static class X extends D {
public X(I inner) { super(inner); }
public I render() {
I i = super.render();
i.setBackgroundColor();
}
}
static class Y extends D {
public Y(I inner) { super(inner); }
public I render() {
I i = super.render();
View v = new View();
//This is objective-c similar syntax,
//I don't know what's equivalent to Java
i.addSubview(v);
}
}
public static void main(String[] args) {
I i1 =new X(new A())
I i2= new Y(new X(new A()))};
I whatINeed1 = i1.render();
I whatINeed2 = i2.render;
}
浅谈装饰设计是添加额外的功能,而无需修改现有的代码。我如何实现下面显示的模型?如何在不修改源代码的情况下绘制边框和滚动条?滚动条需要与原始窗口进行交互。
Thx用于评论,re'Decorator通常用于为X类(方法可以说)添加额外的“特性”,而不修改X的源代码.',我编辑了我的问题,你能帮我回答? –