java 装饰者模式

IPerson:

/**
 * @author com.tiantian
 * @version 创建时间:2012-11-20 下午3:43:04
 */
public interface IPerson {
    public void canDo();
}

Person:

/**
 * @author com.tiantian
 * @version 创建时间:2012-11-20 下午3:44:04
 */
public class Person implements IPerson{

    @Override
    public void canDo() {
        System.out.println("I can code");
    }
}

Decorator(所有Person装饰者的父类):

/**
 * @author com.tiantian
 * @version 创建时间:2012-11-20 下午3:44:55
 */
public class Decorator implements IPerson{
    private IPerson person;
    public Decorator(IPerson person) {
        this.person = person;
    }

    @Override
    public void canDo() {
        person.canDo();
    }
}

DecoratorSwim(Swim装饰--为Peron添加“Swim”功能):

/**
 * @author com.tiantian
 * @version 创建时间:2012-11-20 下午3:48:54
 */
public class DecoratorSwim extends Decorator{

    public DecoratorSwim(IPerson person) {
        super(person);
    }
    
    @Override
    public void canDo() {
        super.canDo();
        System.out.println("I also can swim");
    }
}

DecoratorDraw(Draw装饰--为Peron添加“Draw”功能):

/**
 * @author com.tiantian
 * @version 创建时间:2012-11-20 下午3:47:29
 */
public class DecoratorDraw extends Decorator{

    public DecoratorDraw(IPerson person) {
        super(person);
    }
    @Override
    public void canDo() {
        super.canDo();
        System.out.println("I also can draw");
    }
}

Test:

/**
 * @author com.tiantian
 * @version 创建时间:2012-11-20 下午3:49:35
 */
public class Test {
    public static void main(String[] args) {
        Decorator decorator = new DecoratorDraw(new DecoratorSwim(new Person()));
        decorator.canDo();
    }
}
原文地址:https://www.cnblogs.com/tiantianbyconan/p/2779194.html