您的位置:首页 > 其它

【设计模式】9、装饰器模式

2016-02-25 11:33 239 查看


package com.shejimoshi.structural.Decorator;

/**
* 功能:这个是我们装饰器的基类,用来生成被装饰类和装饰器类
* 时间:2016年2月25日上午10:05:37
* 作者:cutter_point
*/
public abstract class Component
{
//这个方法就是我们装饰器要进行装饰的操作
public abstract void tuo();
}


package com.shejimoshi.structural.Decorator;

/**
* 功能:动态地给一个对象添加一些额外的职责。就增加功能来说装饰器模式比生成子类更加灵活
*         装饰器就是用装饰器类来对我们的私有成员(装饰对象)进行相应的扩展功能
* 适用:在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责
*         处理那些可以撤销的职责
* 时间:2016年2月25日上午9:45:43
* 作者:cutter_point
*/
public class Person extends Component
{
private String name;

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

@Override
public void tuo()
{
System.out.print(this.name + "准备上床睡觉\t");
}
}


package com.shejimoshi.structural.Decorator;

/**
* 功能:装饰器基类,用来对相应的对象进行装饰
* 时间:2016年2月25日上午10:15:02
* 作者:cutter_point
*/
public abstract class Decorator extends Component
{
protected Component component;

public Decorator(Component component)
{
this.component = component;
}

@Override
public void tuo()
{
if(component != null)
component.tuo();
}

}


package com.shejimoshi.structural.Decorator;

/**
* 功能:对于一个操作,上衣
* 时间:2016年2月25日上午10:18:28
* 作者:cutter_point
*/
public class Shangyi extends Decorator
{
//构造函数
public Shangyi(Component component)
{
super(component);
}

@Override
public void tuo()
{
super.tuo();
System.out.print("脱上衣\t");
}
}


package com.shejimoshi.structural.Decorator;

/**
* 功能:对应裤子操作
* 时间:2016年2月25日上午10:49:03
* 作者:cutter_point
*/
public class Kuzhi extends Decorator
{

public Kuzhi(Component component)
{
super(component);
}

@Override
public void tuo()
{
super.tuo();
System.out.print("脱掉裤子\t");
}

}


package com.shejimoshi.structural.Decorator;

/**
* 功能:装饰器模式
* 时间:2016年2月25日上午11:13:55
* 作者:cutter_point
*/
public class Test
{
public static void main(String[] args)
{
Component person = new Person("cutter_point");
Decorator shangyi = new Shangyi(person);
shangyi.tuo();
System.out.println();
Decorator kuzhi = new Kuzhi(person);
kuzhi.tuo();
}
}


测试结果:

cutter_point准备上床睡觉	脱上衣
cutter_point准备上床睡觉	脱掉裤子


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