温习:装饰者模式

原创 2017年01月03日 10:12:22

温习下装饰者模式(定义

从命名可以看出,装饰,在原来的物质之上覆盖一些个性化需求,仅仅是覆盖,不改变其本来的实质;

应了那句谚语“美味的早餐,但很难识别其真实的面目”,道道都很浅显易懂,但执行起来却很容易忽视

举个常用的例子,不同系统接口经常需要不同的报文通讯,那我们来看下:

//请求接口

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())).......

软件来源于生活,应用于生活


版权声明:本文为博主原创文章,未经博主允许不得转载。

设计模式-装饰者模式(Decorator)理解和在Android中的应用

介绍最近写代码没有手感,就看看书找点写代码的灵感。看点高大上的设计模式谈谈自己的理解。我读的是《研磨设计模式》看完之后真正的醍醐灌顶。借用一句话 一本值得反复研读的书 读了设计模式,其实我觉得看...
  • Card361401376
  • Card361401376
  • 2016年04月22日 18:22
  • 5022

JAVA设计模式初探之装饰者模式

这个模式花费了挺长时间,开始有点难理解,其实就是 定义:动态给一个对象添加一些额外的职责,就象在墙上刷油漆.使用Decorator模式相比用生成子类方式达到功能的扩充显得更为灵活。 设计初衷:通常...
  • jason0539
  • jason0539
  • 2014年04月01日 09:07
  • 75185

装饰者模式及其应用

装饰者模式及其应用前几天看了鸿洋大神的 Android 优雅的为RecyclerView添加HeaderView和FooterView,发现装饰者模式 在某些情况下是设计得如此 优雅,现在总结如下: ...
  • gdutxiaoxu
  • gdutxiaoxu
  • 2016年07月11日 23:52
  • 7635

Android设计模式之一个例子让你彻底明白装饰者模式(Decorator Pattern)

导读这篇文章中我不会使用概念性文字来说明装饰者模式,因为通常概念性的问题都很抽象,很难懂,使得读者很难明白到底为什么要使用这种设计模式,我们设计模式的诞生,肯定是前辈们在设计程序的时候遇到了某种困难,...
  • nugongahou110
  • nugongahou110
  • 2015年12月27日 19:40
  • 2882

设计模式——装饰模式(Decorator)

要想正确理解设计模式,首先必须明确它是为了解决什么问题而提出来的。 设计模式学习笔记 ——Shulin 转载请注明出处:http://blog.csdn.net/zhshulin 1、概念 ...
  • u012909091
  • u012909091
  • 2014年08月18日 20:23
  • 17881

设计模式--装饰者模式与代理模式

这次主要总结下装饰着模式和代理模式,这两个一起进行总结,主要是因为两个设计模式特别的类似。先依次说一下两个设计模式,然后再说下两个模式的不同。...
  • u013159433
  • u013159433
  • 2016年05月25日 17:11
  • 834

设计模式--策略模式,装饰模式

坚持着客户端代码是程序的入口,构造函数是类的入口为原则,对策略模式,装饰模式和代理模式理解整理如下:...
  • u012466304
  • u012466304
  • 2014年12月08日 12:57
  • 1922

最常用的设计模式---装饰者模式(C++实现)

最常用的设计模式---适配器模式(C++实现)
  • lh844386434
  • lh844386434
  • 2014年01月06日 22:39
  • 1981

Java 设计模式 装饰者模式

装饰者模式 在设计的时候,往往要给一个对象的功能进行一些修饰,对功能进行拓展和增强,以满足我们的需求。    举个例子,最近流行歌曲比赛,什么《中国好声音》,《中国好歌曲》什么的,对于一个参赛者而言...
  • u010349169
  • u010349169
  • 2014年02月09日 23:57
  • 5593

C++装饰者模式

装饰者模式(Decorator Pattern)是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。...
  • u011012932
  • u011012932
  • 2017年03月27日 17:22
  • 1661
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:温习:装饰者模式
举报原因:
原因补充:

(最多只允许输入30个字)