装饰器模式

一、什么是装饰器模式?

也就是对某一业务进行装饰,不同的装饰器分为不同的组件,互相不牵制,都是为了装饰某一共同业务。

用代码实践比较容易明白

二、代码demmo

首先得清楚装饰器模式的四大组件:
①组件接口

/**
 * @Author : WJ
 * @Date : 2019/4/27/027 10:44
 * 

* 注释: 组件接口-->定义了被装饰者的核心功能和装饰者要加强的功能点 */ public interface IPacketCreator { String handleContent(); }

②具体组件

package decoration;

/**
 * @Author : WJ
 * @Date : 2019/4/27/027 10:46
 * 

* 注释: 具体组件(未装饰) */ public class PacketBodyCreator implements IPacketCreator{ @Override //核心业务,并不包含其他装饰 public String handleContent() { return "Content of Packet"; } }

③装饰者 (其中component是需要被装饰的对象)

package decoration;

/**
 * @Author : WJ
 * @Date : 2019/4/27/027 10:47
 * 

* 注释: 负责维护核心组件 component ,告诉子类核心业务由component完成 */ public abstract class PacketDecorator implements IPacketCreator { IPacketCreator component; PacketDecorator(IPacketCreator component){ this.component = component; } }

④具体装饰者

package decoration;

/**
 * @Author : WJ
 * @Date : 2019/4/27/027 10:50
 * 

* 注释: 具体的装饰器,负责对核心内容进行装饰 (这里是进行HTML格式化操作) */ public class PacketHTMLHeaderCreator extends PacketDecorator { PacketHTMLHeaderCreator(IPacketCreator c){ super(c); } //装饰器具体装饰的类容 @Override public String handleContent() { StringBuffer sb = new StringBuffer(); sb.append(""); sb.append(""); sb.append(component.handleContent()); sb.append(""); sb.append("\n"); return sb.toString(); } } --------------------------------------------------------------------------- package decoration; /** * @Author : WJ * @Date : 2019/4/27/027 10:55 *

* 注释: 同PacketHTMLHeaderCreator一样,也是装饰器,只是装饰的内容不同 */ public class PacketHTTPHeaderCreator extends PacketDecorator { PacketHTTPHeaderCreator(IPacketCreator c){ super(c); } @Override public String handleContent() { StringBuffer sb = new StringBuffer(); sb.append("Cache-Control:no-cache\n"); sb.append("Date:......"); sb.append(component.handleContent()); return sb.toString(); } }

⑤具体使用

可以这样:

package decoration;

/**
 * @Author : WJ
 * @Date : 2019/4/27/027 10:58
 * 

* 注释: */ public class Main { public static void main(String[] a){ //层层装饰 IPacketCreator pc = new PacketHTTPHeaderCreator( new PacketHTMLHeaderCreator( new PacketBodyCreator())); System.out.println(pc.handleContent()); } }

输出为:


image.png

也可以这样:

package decoration;

/**
 * @Author : WJ
 * @Date : 2019/4/27/027 10:58
 * 

* 注释: */ public class Main { public static void main(String[] a){ //层层装饰(减少html装饰) IPacketCreator pc = new PacketHTTPHeaderCreator( new PacketBodyCreator()); System.out.println(pc.handleContent()); } }

输出为:


image.png

以上只是对装饰器模式的一个浅显的理解,后续有待深入...

你可能感兴趣的:(装饰器模式)