Java 非常简单地使用decorator模式生成数字
我是设计图案的新手,我被要求使用装饰图案打印从1到10的数字。我很抱歉,如果这是琐碎的,但我需要学习。这就是我到目前为止所做的: 接口Java 非常简单地使用decorator模式生成数字,java,decorator,Java,Decorator,我是设计图案的新手,我被要求使用装饰图案打印从1到10的数字。我很抱歉,如果这是琐碎的,但我需要学习。这就是我到目前为止所做的: 接口 public interface NextNumber { public int getNextNumber(int n); } 抽象类 abstract public class PrintNumbers implements NextNumber { protected final NextNumber next; protecte
public interface NextNumber {
public int getNextNumber(int n);
}
抽象类
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;
}
}
public class DecoratorCount extends PrintNumbers {
public DecoratorCount(NextNumber next, int num)
{
super(next, num);
}
public static void main(String[] args)
{
int i = 0;
}
}
装饰类
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;
}
}
public class DecoratorCount extends PrintNumbers {
public DecoratorCount(NextNumber next, int num)
{
super(next, num);
}
public static void main(String[] args)
{
int i = 0;
}
}
我不知道该怎么做,甚至不知道我是否走对了路。有人能给你点启发吗?首先,你需要一些可能需要装饰的东西,然后你需要一个装饰师来装饰这些东西。基类和装饰器都是具体的类,可以直接使用
将计数器从1装饰到10没有多大意义(数字总是美丽的;))。但是,您可以实现一个基本类来打印未格式化的数字,然后实现一个装饰器,这会给打印的结果增加一些美感。首先,装饰器类不必扩展装饰的类,而是实现相同的接口 看看这个维基百科 所以你可以像这样纠正你的装饰师:
// 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;
}
}
例如,你们可以把这个数乘以2
public class DoubleDecoratorCount extends DecoratorCount {
public DecoratorCount(PrintNumbers pn)
{
super(pn);
}
public int getNextNumber()
{
return pn.getNextNumber() * 2;
}
}
您可以用这种方式测试decorator
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());
}
}
公共类测试{
公共静态void main(字符串[]args){
打印号码pn=新打印号码(0);
DoubleDecoratorCount decorator=新的DoubleDecoratorCount(pn);
对于(int i=0;i<5;++i)
System.out.println(“值:“+decorator.getNextNumber());
}
}
此时,您可以编写所需的所有装饰器:
- 乘以3李>
- 把结果写在信中李>
- 用十六进制写结果李>
- 等等
PrintNumbers
类?@gasan:是的,我看到了这个咖啡示例,并提出了我的代码版本。问题是,我不确定它应该如何工作。我知道它是用来动态更新对象的,但需要一个更清晰的画面。@dash1e:我不确定该给出什么答案。我在答案中给你写了一个例子,我将类修饰为将结果乘以2。谢谢。我看到你有抽象装饰师和类分别装饰。现在在DoubleDecorateeCount
中,我是否调用main()
?最好将main()
放在一个单独的类中。我刚刚用一个样本更新了答案。这让我更好地理解了为什么我们使用这种模式。非常感谢:)