您的位置:首页 > 编程语言 > Java开发

java设计模式-装饰模式

2016-05-28 18:05 357 查看
什么是装饰模式:

装饰模式就是动态的为一个对象添加新的功能,它是一种代替继承的技术,毋须通过继承增加子类就能拓展对象功能的模式。

开发中应用场景:

1.IO流中,设计的输入和输出

2.Servlet api提供的一个re quest对象的decrator模式的默认实现类HttpServletRequestWrap,遇到wrap字样的基本都是装饰模式

3.swing中图形设计界面的功能

实现例子:

首先是设计装饰模式接口,然后让子类实现

/**
* 能力接口
*
* @author liuxg
* @date 2016年5月27日 上午11:46:38
*/
public interface Ability {

void whatAblity(); // 有什么能力

}

public class Person implements Ability {

@Override
public void whatAblity() {

System.out.println("普通人而已");

}

}

class FlyPerson implements Ability {

private Ability ability;

public FlyPerson(Ability ability) {
this.ability = ability;
}

@Override
public void whatAblity() {
ability.whatAblity();
System.out.println("会飞的能力");

}

}

class StrengePerson implements Ability {

private Ability ability;

public StrengePerson(Ability ability) {
this.ability = ability;
}

@Override
public void whatAblity() {
ability.whatAblity();
System.out.println("超级大力气");

}

}

class ChangePerson implements Ability {

private Ability ability;

public ChangePerson(Ability ability) {
this.ability = ability;
}

@Override
public void whatAblity() {
ability.whatAblity();
System.out.println("会变身");
}

}


这里我们是想装饰一个人,让他有能飞,能变身,还还有超级大力气,这三种能力除了能一起,还能相互组合,继承做这个很麻烦吧

public class Client {

public static void main(String[] args) {

Person person = new Person();
person.whatAblity();

System.out.println("##########################");

FlyPerson flyPerson = new FlyPerson(person);
flyPerson.whatAblity();

System.out.println("##########################");
ChangePerson changePerson = new ChangePerson(flyPerson);
changePerson.whatAblity();

System.out.println("##########################");
StrengePerson strengePerson = new StrengePerson(changePerson);
strengePerson.whatAblity();
}

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