设计模式-decorator模式


装饰者模式体现了 敏捷开发思想中的 对类要 开放扩展,关闭修改.

例子:

一个person主类

若干装饰品类: 红衣服,蓝衣服,蓝鞋子,红鞋子    

测试: new一个person  给他穿上红衣服蓝鞋子

code:

person接口:

public interface IPerson {
	String decorate();
}
Person类:

package com.husw.design.decorator;

public class Person implements IPerson {

	private String name;

	public Person(String name) {
		this.name = name;
	}

	public String decorate() {
		return name;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

}

装饰品:

红衣服:

package com.husw.design.decorator;

public class RedClothesPerson implements IPerson {

	private IPerson p;

	public RedClothesPerson(IPerson p) {
		this.p = p;
	}

	public String decorate() {
		return p.decorate() + ",red clothes";
	}

	public IPerson getP() {
		return p;
	}

	public void setP(IPerson p) {
		this.p = p;
	}

}

package com.husw.design.decorator;

public class BlueClothesPerson implements IPerson {

	private IPerson p;

	public BlueClothesPerson(IPerson p) {
		this.p = p;
	}

	public String decorate() {
		return p.decorate() + ",blue clothes";
	}

	public IPerson getP() {
		return p;
	}

	public void setP(IPerson p) {
		this.p = p;
	}

}

蓝鞋子:

package com.husw.design.decorator;

public class BlueShoesPerson implements IPerson {

	private IPerson p;

	public BlueShoesPerson(IPerson p) {
		this.p = p;
	}

	public String decorate() {
		return p.decorate() + ",blue shoes";
	}

	public IPerson getP() {
		return p;
	}

	public void setP(IPerson p) {
		this.p = p;
	}

}



测试代码:
public class AppTest extends TestCase {
	public void testApp() {
		IPerson p = new Person("LiLei");
		System.out.println(p.decorate());//赤身
		p = new RedClothesPerson(p);
		System.out.println(p.decorate());//穿上红衣
		p = new BlueShoesPerson(p);
		System.out.println(p.decorate());//穿上蓝鞋
	}
}
运行结果:

LiLei
LiLei,red clothes
LiLei,red clothes,blue shoes


例子源码svn:http://design-decorator.googlecode.com/svn/trunk/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值