gpt4 book ai didi

java - 非常简单使用装饰器模式生成数字

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:18:54 25 4
gpt4 key购买 nike

我是设计模式的新手,我被要求使用装饰器模式打印从 1 到 10 的数字。如果这是微不足道的,我很抱歉,但我需要学习。这是我目前所拥有的:

界面

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;
}
}

不确定如何继续,甚至我是否走对了路。有人可以解释一下吗?

最佳答案

首先,装饰器类不必扩展装饰器类,而是实现相同的接口(interface)。

看看这个维基百科page .

所以你可以像这样更正你的装饰器:

// 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;
}
}

你可以用这种方式测试装饰器

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());
}
}

此时你可以编写你需要的所有装饰器:

  • 乘以 3;
  • 将结果写成信;
  • 以十六进制写出结果;
  • 等等...

关于java - 非常简单使用装饰器模式生成数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10136445/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com