设计模式

装饰器模式(Decorator)

2020-07-20  本文已影响0人  秀儿2020

定义

动态的给一个对象参加额外的职责。就添加功能来说,装饰器模式比生成子类更加灵活。

本质

动态组合,动态是手段,组合是目的。

登场角色

示例代码

/**
 * 抽象组件类
 */
public abstract class Person {
    public abstract void dressed();
}


/**
 * 需要被装饰的原始对象
 */
public class Boy extends Person{
    @Override
    public void dressed() {
        System.out.print("穿了衬衫");
    }
}


/**
 * 装饰物
 */
public abstract class PersonCloth extends Person{
    private Person person;

    public PersonCloth(Person person) {
        this.person = person;
    }

    @Override
    public void dressed() {
        person.dressed();
    }
}


/**
 * 具体的装饰物对象1
 */
public class ExpensiveCloth extends PersonCloth{

    public ExpensiveCloth(Person person) {
        super(person);
    }

    /**
     * 穿短袖
     */
    private void dressShirt(){
        System.out.println("穿短袖");
    }
    /**
     * 穿皮衣
     */
    private void dressLeather(){
        System.out.println("穿皮衣");
    }

    @Override
    public void dressed() {
        super.dressed();
        dressShirt();
        dressLeather();
    }
}


/**
 * 具体的装饰物2
 */
public class CheapCloth extends PersonCloth{
    public CheapCloth(Person person) {
        super(person);
    }

    /**
     * 穿短裤
     */
    private void dressShorts(){
        System.out.println("穿短袖");
    }

    @Override
    public void dressed() {
        super.dressed();
        dressShorts();
    }
}

运行结果

穿上昂贵的衣服
穿了衬衫穿短袖
穿皮衣
=============
穿上便宜的衣服
穿了衬衫穿短袖

功能

动态的为对象添加功能,并且是从对象外部来给对象添加功能,相当于是改变了对象的外观。

优点

缺点

何时使用

上一篇 下一篇

猜你喜欢

热点阅读