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

来源:互联网 发布:串行12864接单片机 编辑:程序博客网 时间:2024/05/01 23:34

装饰(Decorator)模式 属于设计模式里的结构模式,通过装饰类 动态的给一个对象添加一些额外的职责。装饰模式也叫包装( wrapper )模式。装饰模式有如下的角色:

抽象构件(component)角色 :这个角色用来规范被装饰的对象,一般用接口方式给出。

具体构件(concrete  component )角色 :被装饰的类。

装饰(decorator)角色 :持有一个构件对象的实例。并定义一个跟抽象构件一直的接口。

具体 (concrete    decorator    装饰角色 :负责给具体构件添加附加职责的类。在实际使用中多数情况下装饰角色和具体装饰角色可能由一个类来承担。

装饰模式的类图如下:

 

装饰模式的例子在生活中很常见,比如房子装修,那房子还是那个房子,只是在房子墙壁上做粉刷,贴墙纸,挂饰品等。java里面的io流,我们经常如下使用:

BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file)));

这个就是装饰模式的使用。还有句话说人靠衣装,美靠靓装。这里就举个程序媛打扮自己的例子来说装饰模式。程序媛打扮自己的模型如下

package decorator;public interface 女人 {  public void 打扮();  }
 
package decorator;public class 程序媛 implements 女人 {  @Override  public void 打扮() {        System.out.println("开始我是素颜。");  }}
 
package decorator;public class 化妆 implements 女人 {  private 女人 女人;  @Override  public void 打扮() {    女人.打扮();  }}
 
package decorator;public class 画眉  extends 化妆 {  private 女人 女人;      public 画眉(女人 女人) {    super();    this.女人 = 女人;  }  public void 打扮() {    System.out.println("画眉了,漂亮了一些。");    女人.打扮();  }}
 
package decorator;public class 刷睫毛  extends 化妆 {  private 女人 女人;      public 刷睫毛(女人 女人) {    super();    this.女人 = 女人;  }  public void 打扮() {    System.out.println("刷睫毛了,更漂亮了一些。");    女人.打扮();  }}
 
package decorator;public class 涂口红  extends 化妆 {  private 女人 女人;      public 涂口红(女人 女人) {    super();    this.女人 = 女人;    打扮();  }  public void 打扮() {    System.out.println("有了口红,哇塞,狐狸精一个!");    女人.打扮();  }}
 
package decorator;public class Client {  /**   *作者:alaric   *时间:2013-7-22下午10:57:13   *描述:测试   */  public static void main(String[] args) {    女人 女1 = new 程序媛();    new 涂口红(new 刷睫毛(new 画眉(女1)));      }}

  运行结果:

有了口红,哇塞,狐狸精一个!

刷睫毛了,更漂亮了一些。

画眉了,漂亮了一些。

开始我是素颜。

通过上面例子我们可以看到,装饰模式在于在原有的功能上添加新的职责。装饰模式能够提供比继承更灵活的对象扩展能力,但是也往往由于这种灵活性会是系统调用变的复杂。
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 3岁宝宝鼻塞咳嗽怎么办 又感冒又咳嗽了怎么办 鼻塞有一个月了怎么办 感冒一直流清水鼻涕怎么办 孩子受凉流清水鼻涕怎么办 一遇冷空气就打喷嚏流鼻涕怎么办 打喷嚏鼻塞流清鼻涕怎么办 哺乳期鼻子不通气有鼻涕怎么办 宝宝热伤风流清鼻涕怎么办 哺乳期感冒流鼻涕怎么办最有效 小孩睡觉太晚了怎么办 孩子晚上睡觉不安稳怎么办 月子里宝宝睡觉不安稳怎么办 月子宝宝睡觉不安稳怎么办 孩子老是流黄鼻涕怎么办 孕妇流黄鼻涕怎么办速效办法 孕妇感冒流黄鼻涕怎么办 孕妇有黄痰和黄鼻涕怎么办 孕妇感冒了流黄鼻涕怎么办 怀孕感冒了怎么办鼻塞流鼻涕 怀孕初期感冒了怎么办鼻塞流鼻涕 怀孕9个月流鼻涕怎么办 怀孕5个月流鼻涕怎么办 小孩老是流黄鼻涕口臭怎么办 狗狗有食欲流黄鼻涕拉稀怎么办 小孩流黄鼻涕咳嗽怎么办 小狗感冒了一直打喷嚏怎么办 眼干眼屎多模糊怎么办 宝宝眼睛上火眼屎多怎么办 眼睛发干眼屎多怎么办 三个月宝宝眼睛流泪有眼屎怎么办 小孩眼睛流泪有眼屎怎么办 宝宝上火眼睛有好多眼屎怎么办 宝宝眼睛流泪还有眼屎怎么办? 新生儿眼睛上火眼屎多怎么办 铁耳屎在最里面怎么办 婴儿鼻屎特别深怎么办 鼻子干呼吸就疼怎么办 儿童鼻子里总有好多鼻屎怎么办 小孩鼻子里有鼻屎呼吸不通怎么办 鼻子不通通气鼻屎粘在鼻子怎么办