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


/**
* 介绍自己
* @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设计模式案例
声明
引用该文档请注明出处