您的位置:首页 > 其它

装饰器模式

2016-04-30 13:01 337 查看
[b]结构型:Decorator(装饰器模式)[/b]

  装饰器模式:给爱用继承的人一个新的设计眼界。

  没错,装饰器的原理是基于继承。如JDK中的IO流,InputStream就是一个抽象类,用IDE检索一下,很容易可以看出。


   

  常用的有FileInputStream、BufferInputStream等。实际上就是在字节流处理的基础上再加一些如字符串处理的步骤。

  用非程序的语言来讲,装饰器有点像是:

  一个普通的人,一个漂亮的人,一个聪明的人。常见的,我们可能会觉得装饰器就像是项链、戒指等首饰,而实际上装饰器的设计模式更像是:戴着项链的和戴着戒指的人都是分开的。我们操作的都是人,而项链和戒指都是附加上去,而且可以不断叠加的。

  

  [b]Demo:[/b]

[b]  [/b]

package top.gabin.oa.web.design.decorator;

/**
* 工作者
* @author linjiabin on  16/4/30
*/
public abstract class Worker {
public void work() {
System.out.println("我在工作,但我不知道能干嘛.");
}
}


package top.gabin.oa.web.design.decorator;

/**
* 程序员
* @author linjiabin on  16/4/30
*/
public class Programmer extends Worker {
@Override
public void work() {
System.out.println("我有程序员的技能,我会编码");
}
}


/**
* 项目管理人
* @author linjiabin on  16/4/30
*/
public class ProjectManager extends Worker {
private Worker worker;

public ProjectManager(Worker worker) {
this.worker = worker;
}

@Override
public void work() {
worker.work();
System.out.println("我懂得项目管理,是一个项目经理.");
}
}


package top.gabin.oa.web.design.decorator;

import org.junit.Test;

/**
* 装饰器测试类
* @author linjiabin on  16/4/30
*/
public class TestDecorator {

@Test
public void testWork() {
// 程序员
Programmer programmer = new Programmer();
// 项目管理人
ProjectManager pm = new ProjectManager(programmer);
// 我是一个拥有程序员技能的项目管理人
pm.work();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: