设计模式——装饰模式

164 阅读1分钟

最新修改已更新到github

装饰模式_通过装饰方式丰富对象的功能

/**
 * 介绍自己
 * @author maikec
 * @date 2019/5/14
 */
public abstract class AbstractIntroduce {
    protected String name;
    public String getName(){
        return name;
    }

    /**
     * 自我介绍
     * @param name 名称
     */
    public abstract void introduce(String name);
}

/**
 * @author maikec
 * @date 2019/5/14
 */
public class DefaultIntroduce extends AbstractIntroduce {
    @Override
    public void introduce(String name) {
        Assert.notNull( name );
        this.name = "{"+name+"}";
    }
}

/**
 * 抽象装饰类
 * @author maikec
 * @date 2019/5/14
 */
public abstract class AbstractIntroduceDecorator extends AbstractIntroduce {
    protected AbstractIntroduce introduce;
}

/**
 * 具体装饰类
 * @author maikec
 * @date 2019/5/14
 */
public class PrettyIntroduce extends AbstractIntroduceDecorator {
    public PrettyIntroduce(AbstractIntroduce introduce){
        super.introduce = introduce;
    }
    @Override
    public void introduce(String name) {
        System.out.println( "====" );
        introduce.introduce( name );
        System.out.println( introduce.getName() );
        System.out.println( "====" );
    }
}

/**
 * @author maikec
 * @date 2019/5/14
 */
public class DecoratorDemo {
    public static void main(String[] args) {
        /**
         * 默认格式
         */
        AbstractIntroduce defaultIntroduce = new DefaultIntroduce();
        defaultIntroduce.introduce( "Default Introduce" );
        System.out.println( defaultIntroduce.getName() );

        /**
         * 装饰器模式
         */
        AbstractIntroduce prettyIntroduce = new PrettyIntroduce( defaultIntroduce );
        prettyIntroduce.introduce( "Decorator Introduce" );
        System.out.println( prettyIntroduce.getName() );
    }
}

附录

github.com/maikec/patt… 个人GitHub设计模式案例

声明

引用该文档请注明出处