码迷,mamicode.com
首页 > 其他好文 > 详细

装饰者模式

时间:2018-06-22 16:31:49      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:赋值   package   创建   decorator   imp   方法   col   int   static   

装饰者模式的实现有两个要求:
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

 

装饰者模式

标签:赋值   package   创建   decorator   imp   方法   col   int   static   

原文地址:https://www.cnblogs.com/wangyanei2017/p/9213813.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!