更改对象的值';在java中使用decorator模式的s变量?
我有一个程序,它使用生成器模式来构建ID对象。我不确定Builder模式的实现是否正确。但是,这个程序可以创建一个ID对象。一旦创建了对象,我想实现Decorator模式来为我的对象添加功能 这是我的身份证等级更改对象的值';在java中使用decorator模式的s变量?,java,design-patterns,decorator,Java,Design Patterns,Decorator,我有一个程序,它使用生成器模式来构建ID对象。我不确定Builder模式的实现是否正确。但是,这个程序可以创建一个ID对象。一旦创建了对象,我想实现Decorator模式来为我的对象添加功能 这是我的身份证等级 public class ID implements IID { int width; int height; String name; String idnumber; boolean border = false; String bor
public class ID implements IID {
int width;
int height;
String name;
String idnumber;
boolean border = false;
String borderColor;
public int getWidth() {return this.width;}
public int getHeight() {return this.height;}
public String getName() {return this.name;}
public String getIDNumber() {return this.idnumber;}
public boolean isBordered() {return border;}
public String getBorderColor() {return borderColor;}
@Override
public void addBorder() {
this.border = true;
}
}
boolean border
、String borderColor
、isBordered()
、getBorderColor()
和addBorder()
用于装饰图案
这是接口IID
public interface IID {
void addBorder();
}
这是装修工
public abstract class IDDecorator implements IID {
protected ID decoratedID;
public IDDecorator(ID decoratedID) {
this.decoratedID = decoratedID;
}
public void addBorder() {
decoratedID.addBorder();
}
}
public class GrayIDDecorator extends IDDecorator {
public GrayIDDecorator(ID decoratedID) {
super(decoratedID);
}
@Override
public void addBorder() {
decoratedID.addBorder();
setGrayBorder(decoratedID);
}
private void setGrayBorder(ID decoratedID) {
decoratedID.borderColor="Gray";
}
}
这是混凝土装饰工
public abstract class IDDecorator implements IID {
protected ID decoratedID;
public IDDecorator(ID decoratedID) {
this.decoratedID = decoratedID;
}
public void addBorder() {
decoratedID.addBorder();
}
}
public class GrayIDDecorator extends IDDecorator {
public GrayIDDecorator(ID decoratedID) {
super(decoratedID);
}
@Override
public void addBorder() {
decoratedID.addBorder();
setGrayBorder(decoratedID);
}
private void setGrayBorder(ID decoratedID) {
decoratedID.borderColor="Gray";
}
}
我还想知道super()
在这个具体的装饰器中有什么用途。什么是super()
这是主课
...
public static void main(String[] args) {
...
IDBuilderDirector idd = new IDBuilderDirector();
...
ID id = idd.construct(roleD, idnumber, fname, lname);
...
IID grayID = new GrayIDDecorator(id);
id.addBorder();
if (id.isBordered()) {
System.out.println("Border: "+id.getBorderColor());
} else {
System.out.println("Border: None");
}
}
IDBuilderDirector
和相关方法用于构建器模式
在主类中,我使用了GrayIDDecorator
。程序执行后,我现在有了带边框的ID。但是为什么我不能更改ID的borderColor
的值呢?如果调用id.getBorderColor()
,它将返回null
另外,我想知道我的程序中装饰器模式的实现是否正确
这是我下面关于装饰图案的链接。
super(…)
正在调用超类的构造函数。那里没有构建器模式。您的教程实现它有点错误。请参阅及其示例-抽象装饰器的要点是对其子类隐藏包装的项,以便它们可以像在常规类层次结构中那样调用super
。如果你不使用它,就完全跳过抽象的部分。最后必须使用grayID.addBorder()
。装饰的对象将替换未装饰的对象。这有点像一辆汽车builder@john,是的,我没有在代码中包含生成器模式。。