设计模式之装饰模式

来源:互联网 发布:js table 导出excel 编辑:程序博客网 时间:2024/06/05 21:53

一、装饰模式
1.装饰模式定义:动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更加灵活。

2.装饰模式的UML
这里写图片描述

3.装饰模式的示例

/** * 装饰模式是为已有功能动态的添加更多功能的一种方式 * 它把每个要装饰的功能放在单独的类中,并让这个类包装它所要装饰的对象,因此,当需要执行特殊行为时, * 客户端代码可以在运行时根据需要有选择的和按顺序的使用装饰功能包装对象。 *  * 把类中的装饰功能从类中搬移出去,简化原有类 * 有效的把类的核心职责和装饰功能区分开了,而且可以去除相关类中重复的装饰逻辑 *  * 首先有一个对象 * 然后有一个具体实现类和一个抽象类继承这个对象 * 然后有一堆装饰功能类继承这个抽象类,实现不同的装饰功能 *  * java中的IO流就是装饰者模式 * @author shier * */class Finery extends Person{    protected Person person;    //这是打扮方法放入不同的类    public void Decorate(Person person) {        this.person = person;    }    @Override    public void show() {        if(person != null){            person.show();        }    }}class TShirts extends Finery{    @Override    public void show() {        System.out.print("大TShift ");        super.show();    }}class BigTrouser extends Finery{    @Override    public void show() {        System.out.print("垮裤 ");        super.show();    }}public class Person {    private String name;    public Person(){    }    public Person(String name) {        this.name = name;    }    public void show(){        System.out.println(String.format("装扮的{0}", name));    }    public static void main(String[] args) {        Person p = new Person("十二");        TShirts t = new TShirts();        BigTrouser bt = new BigTrouser();        System.out.println("装扮开始");        t.Decorate(p);        bt.Decorate(t);        bt.show();    }}
0 0
原创粉丝点击