java设计模式-装饰模式

来源:互联网 发布:编辑地图的软件 编辑:程序博客网 时间:2024/05/16 17:29

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

开发中应用场景:
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();    }}
0 0
原创粉丝点击