装饰模式:动态地给一个类添加一些额外的职责,并且在添加这些职责时不会影响该类的执行逻辑,例如通过BufferedInputStream装饰InputStream来添加数据缓冲功能。下面以女人化妆为例来演示装饰模式,如下 :
接口类型 :
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();
}
}
每添加一种装饰会增加一种职责,会进行相应的操作。
输出 :如下
==要出门了,朴素的女人不化妆==--脸上麻子多,打粉底掩盖下--
==要出门了,朴素的女人不化妆==
--画个浓眉毛--
--脸上麻子多,打粉底掩盖下--
==要出门了,朴素的女人不化妆==
--再给性感的嘴唇涂点口红--
--画个浓眉毛--
--脸上麻子多,打粉底掩盖下--
==要出门了,朴素的女人不化妆==