Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
验证Java中Decorator模式的实现_Java_Design Patterns_Decorator - Fatal编程技术网

验证Java中Decorator模式的实现

验证Java中Decorator模式的实现,java,design-patterns,decorator,Java,Design Patterns,Decorator,我正在学习设计模式的实际实现。下面是Decorator设计模式的实现。我想知道实施是否正确。让我知道它是否可以改进或不正确 interface Markable { void mark(); } class SingleMarker implements Markable { @Override public void mark() { System.out.println("Single Marker"); } } class MarkerD

我正在学习设计模式的实际实现。下面是Decorator设计模式的实现。我想知道实施是否正确。让我知道它是否可以改进或不正确

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

}
接口可标记
{
无效标记();
}
类SingleMarker实现可标记的
{
@凌驾
公共无效标记(){
System.out.println(“单标记”);
}
}
类MarkerDecorator实现了Markable
{
保护单标记单标记;
公共标记编辑器(最终单标记单标记){
this.singleMarker=singleMarker;
}
@凌驾
公共无效标记(){
this.singleMarker.mark();
}
}
类MultipleMarker扩展MarkerDecorator
{
私人国际号码;
公共多标记器(单标记器单标记器){
这(单标记,2);
}
公共多标记器(SingleMarker SingleMarker,int numberOfMarks){
超级(单标记);
this.numberOfMarks=numberOfMarks;
}
@凌驾
公共无效标记(){
for(int i=0;i
  • 附言

    如果这个问题不适合这个论坛,请让我知道


唯一的改进是针对接口编程,而不是实现

  • 使用
    MarkerDecorator
    MultipleMarker
    中的
    Markable
    界面,而不是
    SingleMarker
  • 这也是为什么
    MultipleMarker
    需要扩展
    MarkerDecorator
    而不是直接实现接口的问题。这是你的情况,没有必要

  • 你应该提出它可能更适合这个问题。版主可以迁移这个问题吗?如果没有,我可以手动完成。谢谢。将改进实施。你的第二个问题很有道理。其他人有什么想法吗?