Java 装饰模式
2013-12-23 09:52
155 查看
装饰模式:动态地给一个类添加一些额外的职责,并且在添加这些职责时不会影响该类的执行逻辑,例如通过BufferedInputStream装饰InputStream来添加数据缓冲功能。下面以女人化妆为例来演示装饰模式,如下 :
实现Face接口,原始类型,没有装饰。
打粉底装饰:
画眉毛装饰 :
涂口红装饰 :
测试 :
每添加一种装饰会增加一种职责,会进行相应的操作。
输出 :如下
==要出门了,朴素的女人不化妆==
--脸上麻子多,打粉底掩盖下--
==要出门了,朴素的女人不化妆==
--画个浓眉毛--
--脸上麻子多,打粉底掩盖下--
==要出门了,朴素的女人不化妆==
--再给性感的嘴唇涂点口红--
--画个浓眉毛--
--脸上麻子多,打粉底掩盖下--
==要出门了,朴素的女人不化妆==
接口类型 : package com.umeng.dp.decorator; /** * @Copyright: Umeng.com, Ltd. Copyright 2011-2015, All rights reserved * * @Title: WomenFace.java * @Package com.umeng.dp.decorator * @Description: Face接口 * * @author Honghui He * @version V1.0 */ public interface Face { public void outting(); }
实现Face接口,原始类型,没有装饰。
package com.umeng.dp.decorator; /** * @Copyright: Umeng.com, Ltd. Copyright 2011-2015, All rights reserved * @Title: UglyWomen.java * @Package com.umeng.dp.decorator * @Description: 自然朴素的女人 * @author Honghui He * @version V1.0 */ public class NaturalWomen implements Face { @Override public void outting() { System.out.println("==要出门了,朴素的女人不化妆=="); } }
打粉底装饰:
package com.umeng.dp.decorator; /** * @Copyright: Umeng.com, Ltd. Copyright 2011-2015, All rights reserved * @Title: MashupDecorator.java * @Package com.umeng.dp.decorator * @Description: 打粉底装饰 * @author Honghui He * @version V1.0 */ public class MashupDecorator implements Face { /** * */ private Face mFace = null; /** * @Title: MashupDecorator * @Description: MashupDecorator Constructor * @param face */ public MashupDecorator(Face face) { mFace = face; } @Override public void outting() { addMashup(); mFace.outting(); } private void addMashup() { System.out.println(" --脸上麻子多,打粉底掩盖下--"); } }
画眉毛装饰 :
package com.umeng.dp.decorator; /** * @Copyright: Umeng.com, Ltd. Copyright 2011-2015, All rights reserved * * @Title: EyebrowDecorator.java * @Package com.umeng.dp.decorator * @Description: 眉毛装饰 * * @author Honghui He * @version V1.0 */ public class EyebrowDecorator implements Face { /** * */ private Face mFace = null; public EyebrowDecorator(Face face) { mFace = face; } @Override public void outting() { paintEyebrow(); mFace.outting(); } private void paintEyebrow() { System.out.println(" --画个浓眉毛--"); } }
涂口红装饰 :
package com.umeng.dp.decorator; /** * @Copyright: Umeng.com, Ltd. Copyright 2011-2015, All rights reserved * @Title: LipstickDecorator.java * @Package com.umeng.dp.decorator * @Description: 口红装饰 * @author Honghui He * @version V1.0 */ public class LipstickDecorator implements Face { /** * */ private Face mFace = null; public LipstickDecorator(Face face) { mFace = face; } @Override public void outting() { lipstick(); mFace.outting(); } private void lipstick() { System.out.println(" --再给性感的嘴唇涂点口红--"); } }
测试 :
package com.umeng.dp.decorator; /** * @Copyright: Umeng.com, Ltd. Copyright 2011-2015, All rights reserved * @Title: Test.java * @Package com.umeng.dp.decorator * @Description: 装饰模式,动态的添加功能 * @author Honghui He * @version V1.0 */ public class Test { public static void main(String[] args) { // 不花装的女人 Face womanFace = new NaturalWomen(); womanFace.outting(); // 化粉底 womanFace = new MashupDecorator(womanFace); womanFace.outting(); // 画眉毛 womanFace = new EyebrowDecorator(womanFace); womanFace.outting(); // 涂口红 womanFace = new LipstickDecorator(womanFace); womanFace.outting(); } }
每添加一种装饰会增加一种职责,会进行相应的操作。
输出 :如下
==要出门了,朴素的女人不化妆==
--脸上麻子多,打粉底掩盖下--
==要出门了,朴素的女人不化妆==
--画个浓眉毛--
--脸上麻子多,打粉底掩盖下--
==要出门了,朴素的女人不化妆==
--再给性感的嘴唇涂点口红--
--画个浓眉毛--
--脸上麻子多,打粉底掩盖下--
==要出门了,朴素的女人不化妆==
相关文章推荐
- Java 设计模式_装饰器模式
- JAVA设计模式之装饰模式
- 大话设计模式java版本 第六章 装饰模式
- 黑马程序员java基础篇----由I/O流到装饰模式
- Java设计模式 - Decorator(装饰模式)
- 装饰模式--Java
- java设计模式--装饰模式
- 设计模式之装饰模式(Java实现)
- java 装饰模式(Decorator or Wrapper)
- Java设计模式-装饰模式(Decorator模式)
- java设计模式之装饰器模式
- java设计模式-装饰模式
- 设计模式学习笔记--设计模式在Java I/O中的应用(装饰模式和适配器模式)
- Java设计模式(五)----装饰器模式
- Java设计模式12:装饰器模式
- (三)Java设计模式--装饰器模式
- java设计模式4.适配器模式、装饰器模式
- Java装饰模式
- Java基础知识IO流(装饰设计模式)
- Java设计模式—装饰模式