我有这个使用Builder Pattern构建ID对象的程序。我不确定Builder Pattern的实现是否正确。但是,该程序可以创建一个ID对象。一旦创建了Object,我想实现Decorator Pattern来为我的对象添加功能。
这是我的ID类
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();
}
}
这是Concrete Decorator,
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
及相关方法适用于Builder Pattern。
在主课程中,我使用了GrayIDDecorator
。执行程序后,我现在有了带边框的ID。但为什么我无法更改ID borderColor
的值?如果我致电id.getBorderColor()
,它将返回null
。
另外,我想知道我程序中的Decorator模式的实现是否正确。
这是我关于Decorator Pattern的链接。 http://www.tutorialspoint.com/design_pattern/decorator_pattern.htm