在 Java 中验证装饰模式的实现
Validating the implementation of the Decorator Pattern in Java
我正在学习设计模式的实践。下面是装饰器设计模式的一个实现。我想知道实施是否正确。让我知道它是否可以改进或不正确。
interface Markable
{
void mark();
}
class SingleMarker implements Markable
{
@Override
public void mark() {
System.out.println("Single Marker");
}
}
class MarkerDecorator implements Markable
{
protected SingleMarker singleMarker;
public MarkerDecorator(final SingleMarker singleMarker) {
this.singleMarker = singleMarker;
}
@Override
public void mark() {
this.singleMarker.mark();
}
}
class MultipleMarker extends MarkerDecorator
{
private int numberOfMarks;
public MultipleMarker(SingleMarker singleMarker) {
this(singleMarker, 2);
}
public MultipleMarker(SingleMarker singleMarker, int numberOfMarks) {
super(singleMarker);
this.numberOfMarks = numberOfMarks;
}
@Override
public void mark() {
for (int i = 0; i < numberOfMarks; i++) {
super.singleMarker.mark();
}
}
}
P.S.
如果这个问题不适合这个论坛,请告诉我。
唯一的改进是针对接口而非实现进行编程。
- 在
MarkerDecorator
和MultipleMarker
中使用Markable
接口代替SingleMarker
。
- 也是一个问题,为什么
MultipleMarker
需要扩展MarkerDecorator
,而不是直接实现接口。根据您的情况,没有必要。
我正在学习设计模式的实践。下面是装饰器设计模式的一个实现。我想知道实施是否正确。让我知道它是否可以改进或不正确。
interface Markable
{
void mark();
}
class SingleMarker implements Markable
{
@Override
public void mark() {
System.out.println("Single Marker");
}
}
class MarkerDecorator implements Markable
{
protected SingleMarker singleMarker;
public MarkerDecorator(final SingleMarker singleMarker) {
this.singleMarker = singleMarker;
}
@Override
public void mark() {
this.singleMarker.mark();
}
}
class MultipleMarker extends MarkerDecorator
{
private int numberOfMarks;
public MultipleMarker(SingleMarker singleMarker) {
this(singleMarker, 2);
}
public MultipleMarker(SingleMarker singleMarker, int numberOfMarks) {
super(singleMarker);
this.numberOfMarks = numberOfMarks;
}
@Override
public void mark() {
for (int i = 0; i < numberOfMarks; i++) {
super.singleMarker.mark();
}
}
}
P.S.
如果这个问题不适合这个论坛,请告诉我。
唯一的改进是针对接口而非实现进行编程。
- 在
MarkerDecorator
和MultipleMarker
中使用Markable
接口代替SingleMarker
。 - 也是一个问题,为什么
MultipleMarker
需要扩展MarkerDecorator
,而不是直接实现接口。根据您的情况,没有必要。