温习:装饰者模式
来源:互联网 发布:孙雨朦和孙雨彤 知乎 编辑:程序博客网 时间:2024/06/03 05:52
温习下装饰者模式(定义)
从命名可以看出,装饰,在原来的物质之上覆盖一些个性化需求,仅仅是覆盖,不改变其本来的实质;
应了那句谚语“美味的早餐,但很难识别其真实的面目”,道道都很浅显易懂,但执行起来却很容易忽视
举个常用的例子,不同系统接口经常需要不同的报文通讯,那我们来看下:
//请求接口
public interface IRequest extends Serializable {
Object assemble();//组装报文
}
为什么写接口呢,不明白的同学可以看看java基础设计规范,“依赖倒置原则”:〔要依赖抽象,不要依赖具体类〕
//请求基类
public class BaseRequest implements IRequest {
private static final long serialVersionUID = 1L;
private IRequest request;
public BaseRequest(IRequest request) {
super();//关注点,实现父类构造器
this.request = request;
}
public Object assemble() {
return this.request.assemble();//组装接口
}
}
有个接口、有个基类,既然是装饰,那大家是有共性的,否则怎么动态添加想要的功能或职责呢,我们继续:
//公共信息
public class PublicRequest extends BaseRequest {
private static final long serialVersionUID = 1L;
public PublicRequest(IRequest request) {
super(request);
}
/** 服务名 */
protected String serviceName;
public String getServiceName() {
return serviceName;
}
public void setServiceName(String serviceName) {
this.serviceName = serviceName;
}
public Object assemble() {
String request=(String) super.assemble();//关注点,执行父类组装
//拼接基础报文......
return request;
}
}
如下是个性信息类:
public class RequestOf* extends BaseRequest {//个性信息类
private static final long serialVersionUID = 1L;
public PayRequestOf*(IRequest request) {
super(request);
}
/** 姓名 */
protected String name;
public String getName() {
return name;
}
public void setCustomerName(String name) {
this.name= name;
}
public Object assemble() {
String request=(String) super.assemble();
//拼接个性报文...
return request;
}
}
我们在凭借各种不同的报文时候
IRequest channel1Request=new RequestOf*(new PublicRequest());
//是不是很方便呢
IRequest channel1Request=new RequestOf*(new RequstOf*(new PublicRequest())).......
软件来源于生活,应用于生活
- 温习:装饰者模式
- 温习观察者模式
- 温习设计模式
- 温习:策略模式
- 温习设计模式单列
- 装饰者模式(Derector)
- 装饰者模式
- Decorator 装饰者模式
- 装饰者设计模式
- 装饰者模式
- 装饰者模式
- 装饰者模式
- 装饰者模式(Decorator)
- 装饰者模式
- 装饰者模式
- 装饰者模式
- 装饰者模式 DecoratorPattern
- 设计模式 - 装饰者
- Ubuntu 上手
- ExpandableRecyclerView
- 隐藏微信公众号页面转发功能
- TCP协议的三次握手与四次挥手
- wamp上配置虚拟主机
- 温习:装饰者模式
- 解密随机数生成器
- 谁前端比较好,帮我看看
- [笔记]《Linux内核设计与实现》第四章进程调度
- LeetCode Regular Expression Matching
- 利用JQuery实现web页面中table导出excel的功能
- 推荐几本实用的书
- SQL SERVER 复制死锁解决方法
- 如何在Kubernetes中暴露服务访问