一、什么是裝飾器模式瞪醋?
也就是對(duì)某一業(yè)務(wù)進(jìn)行裝飾忿晕,不同的裝飾器分為不同的組件,互相不牽制银受,都是為了裝飾某一共同業(yè)務(wù)践盼。
用代碼實(shí)踐比較容易明白
二、代碼demmo
首先得清楚裝飾器模式的四大組件:
①組件接口
/**
* @Author : WJ
* @Date : 2019/4/27/027 10:44
* <p>
* 注釋: 組件接口-->定義了被裝飾者的核心功能和裝飾者要加強(qiáng)的功能點(diǎn)
*/
public interface IPacketCreator {
String handleContent();
}
②具體組件
package decoration;
/**
* @Author : WJ
* @Date : 2019/4/27/027 10:46
* <p>
* 注釋: 具體組件(未裝飾)
*/
public class PacketBodyCreator implements IPacketCreator{
@Override
//核心業(yè)務(wù)蚓土,并不包含其他裝飾
public String handleContent() {
return "Content of Packet";
}
}
③裝飾者 (其中component是需要被裝飾的對(duì)象)
package decoration;
/**
* @Author : WJ
* @Date : 2019/4/27/027 10:47
* <p>
* 注釋: 負(fù)責(zé)維護(hù)核心組件 component 宏侍,告訴子類核心業(yè)務(wù)由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
* <p>
* 注釋: 具體的裝飾器,負(fù)責(zé)對(duì)核心內(nèi)容進(jìn)行裝飾 (這里是進(jìn)行HTML格式化操作)
*/
public class PacketHTMLHeaderCreator extends PacketDecorator {
PacketHTMLHeaderCreator(IPacketCreator c){
super(c);
}
//裝飾器具體裝飾的類容
@Override
public String handleContent() {
StringBuffer sb = new StringBuffer();
sb.append("<html>");
sb.append("<body>");
sb.append(component.handleContent());
sb.append("</body>");
sb.append("</html>\n");
return sb.toString();
}
}
---------------------------------------------------------------------------
package decoration;
/**
* @Author : WJ
* @Date : 2019/4/27/027 10:55
* <p>
* 注釋: 同PacketHTMLHeaderCreator一樣蜀漆,也是裝飾器谅河,只是裝飾的內(nèi)容不同
*/
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
* <p>
* 注釋:
*/
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
* <p>
* 注釋:
*/
public class Main {
public static void main(String[] a){
//層層裝飾(減少html裝飾)
IPacketCreator pc = new PacketHTTPHeaderCreator(
new PacketBodyCreator());
System.out.println(pc.handleContent());
}
}
輸出為:
image.png
以上只是對(duì)裝飾器模式的一個(gè)淺顯的理解,后續(xù)有待深入...