我是设计模式的新手,我被要求使用装饰模式从1到10打印数字.我很抱歉,如果这是微不足道的,但我需要学习.这是我到目前为止:
接口
public interface NextNumber {
public int getNextNumber(int n);
}
Run Code Online (Sandbox Code Playgroud)
抽象类
abstract public class PrintNumbers implements NextNumber {
protected final NextNumber next;
protected int num;
public PrintNumbers(NextNumber next, int num)
{
this.next = next;
this.num = num;
}
public int getNextNumber(int num)
{
return num+1;
}
}
Run Code Online (Sandbox Code Playgroud)
DecoratorClass
public class DecoratorCount extends PrintNumbers {
public DecoratorCount(NextNumber next, int num)
{
super(next, num);
}
public static void main(String[] args)
{
int i = 0;
}
}
Run Code Online (Sandbox Code Playgroud)
不确定如何继续,或者即使我走的是正确的方式.有人能解开一些光吗?
首先,装饰器类不必扩展装饰的类,而是实现相同的接口.
看看这个维基百科页面.
所以你可以像这样纠正你的装饰者:
// The interface
public interface NextNumber {
public int getNextNumber();
}
// The class to decorate
public class PrintNumbers implements NextNumber {
protected int num;
public PrintNumbers(int startFrom)
{
this.num = startFrom;
}
public int getNextNumber()
{
return num++;
}
}
// The abstract decorator
public abstract class DecoratorCount implements NextNumber {
private PrintNumbers pn;
public DecoratorCount(PrintNumbers pn)
{
this.pn = pn;
}
}
Run Code Online (Sandbox Code Playgroud)
然后,例如,您可以将数字乘以2.
public class DoubleDecoratorCount extends DecoratorCount {
public DecoratorCount(PrintNumbers pn)
{
super(pn);
}
public int getNextNumber()
{
return pn.getNextNumber() * 2;
}
}
Run Code Online (Sandbox Code Playgroud)
你可以用这种方式测试装饰器
public class Test {
public static void main (String[] args) {
PrintNumbers pn = new PrintNumbers(0);
DoubleDecoratorCount decorator = new DoubleDecoratorCount(pn);
for (int i = 0 ; i < 5 ; ++i)
System.out.println("value: " + decorator.getNextNumber());
}
}
Run Code Online (Sandbox Code Playgroud)
此时,您可以编写所需的所有装饰器:
| 归档时间: |
|
| 查看次数: |
5512 次 |
| 最近记录: |