装饰者模式

Posted wangyanei2017

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了装饰者模式相关的知识,希望对你有一定的参考价值。

装饰者模式的实现有两个要求:
1.装饰者类与目标类要实现相同的借口,或者继承自相同的抽象类。
2.装饰者类中要有目标类的引用作为成员变量,具体的赋值一般通过带参构造器完成。

按着这两个要求我们进行类的编写。

目标类:

//接口
package com.wk.decorator;

public interface IMyService {
     
    String sayHello();
}
//实现类
package com.wk.decorator;

public class IMyServiceImpl implements IMyService {

    @Override
    public String sayHello() {
        
        return "hello";
    }

}

装饰者基类

package com.wk.decorator;


//装饰者基类:不对目标类进行增强 ,无参构造,目标对象引用
public class DecoratorBase implements IMyService {

    protected IMyService target;
    
    public DecoratorBase() {
        super();
    }
    public DecoratorBase(IMyService target) {
        this.target = target;
    }
    @Override
    public String sayHello() {
        //调用目标方法 不增强。
        return target.sayHello();
    }

}

具体装饰者类

//具体装饰者类1
package com.wk.decorator;
//具体装饰类:继承基类,单一增强。有参构造。
public class WhoSay extends DecoratorBase {

    public WhoSay(IMyService target) {
        super(target);
    }
   
   //重写基类业务方法 增强。
    @Override
    public String sayHello() {
        return "Jack say " +super.sayHello();
    }
}
//具体装饰者类2
package com.wk.decorator;

public class toWho extends DecoratorBase {

    public toWho(IMyService target) {
        super(target);
    }
   
    @Override
    public String sayHello() {
        // TODO Auto-generated method stub
        return super.sayHello()+" to Tom";
    }
}

测试:

package com.wk.decorator;

public class Test {
    public static void main(String[] args) {
       //创建目标对象
        IMyService target=new IMyServiceImpl();
        //使用目标对象作为参数,创建装饰者类
        IMyService who=new WhoSay(target);
        
        String one=who.sayHello();
        System.out.println(one);
        //将第一次增强的结果作为第二次增强的参数出现,形成“装饰者链”
        IMyService towho=new toWho(who);
        
        String two=towho.sayHello();
        System.out.println(two); } }

测试结果:

Jack say hello
Jack say hello to Tom

 














以上是关于装饰者模式的主要内容,如果未能解决你的问题,请参考以下文章

Java设计模式之装饰者模式

设计模式整理_装饰者模式

设计模式-装饰者模式(Go语言描述)

设计模式-装饰者模式(Go语言描述)

装饰者模式

设计模式 之 装饰者模式