装饰者模式(Decorator)(常用)

2019-09-26  本文已影响0人  jiahzhon

定义:

指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式,它属于对象结构型模式。

使用场景:

主要角色:

代码:

public class DecoratorPattern
{
    public static void main(String[] args)
    {
        Component p=new ConcreteComponent();
        p.operation();
        System.out.println("---------------------------------");
        Component d=new ConcreteDecorator(p);
        d.operation();
    }
}
//抽象构件角色
interface  Component
{
    public void operation();
}
//具体构件角色
class ConcreteComponent implements Component
{
    public ConcreteComponent()
    {
        System.out.println("创建具体构件角色");       
    }   
    public void operation()
    {
        System.out.println("调用具体构件角色的方法operation()");           
    }
}
//抽象装饰角色
class Decorator implements Component
{
    private Component component;   
    public Decorator(Component component)
    {
        this.component=component;
    }   
    public void operation()
    {
        component.operation();
    }
}
//具体装饰角色
class ConcreteDecorator extends Decorator
{
    public ConcreteDecorator(Component component)
    {
        super(component);
    }   
    public void operation()
    {
        super.operation();
        addedFunction();
    }
    public void addedFunction()
    {
        System.out.println("为具体构件角色增加额外的功能addedFunction()");           
    }
}

例子:

  1. 奶茶算钱-奶茶加各种料后算钱。奶茶类有算钱的算法,料也有。他们有相同的动作,算出一个结果,这个时候用装饰者比较好。
  2. 描述人-
public interface Person {
    void desc();
}
package decoration;

/**
 * Created by bitsino-001 on 2019/6/20.
 * 被装饰类
 */
public class Kobe implements Person {
    @Override
    public void desc() {
        System.out.println("kobe是一个人");
    }
}
package decoration;

/**
 * Created by bitsino-001 on 2019/6/20.
 * 装饰器
 */
public class PersonDecorator implements Person {
    /**
     * 持有被装饰类,以公共接口接收
     */
    Person person;
    public PersonDecorator(Person person) {
        this.person = person;
    }

    @Override
    public void desc() {
        person.desc();
    }
}
public class HighPerson extends PersonDecorator {
    public HighPerson(Person person) {
        super(person);
    }

    @Override
    public void desc() {
        super.desc();
        System.out.println("是一个很高的人");
    }
}

public class RichPerson extends PersonDecorator {
    public RichPerson(Person person) {
        super(person);
    }

    @Override
    public void desc() {
        super.desc();
        System.out.println("是一个富人");
    }
}

public class PrettyPerson extends PersonDecorator {
    public PrettyPerson(Person person) {
        super(person);
    }

    @Override
    public void desc() {
        super.desc();
        System.out.println("是一个帅人");
    }
}
person = new PrettyPerson(new RichPerson(new HighPerson(new Kobe())));

IO流


1569493975(1).jpg
上一篇下一篇

猜你喜欢

热点阅读