zoukankan      html  css  js  c++  java
  • 装饰模式(Decorator)

    装饰模式(Decorator)

    顾名思义,装饰模式就是给一个对象增加一些新的功能,而且是动态的,要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例,关系图如下:

    Source类是被装饰类,Decorator类是一个装饰类,可以为Source类动态的添加一些功能,代码如下:

    [java] view plaincopy
    public interface Sourceable {
    public void method();
    }
    [java] view plaincopy
    public class Source implements Sourceable {

    @Override
    public void method() {
    System.out.println("the original method!");
    }
    }
    [java] view plaincopy
    public class Decorator implements Sourceable {

    private Sourceable source;

    public Decorator(Sourceable source){
    super();
    this.source = source;
    }
    @Override
    public void method() {
    System.out.println("before decorator!");
    source.method();
    System.out.println("after decorator!");
    }
    }
    测试类:

    [java] view plaincopy
    public class DecoratorTest {

    public static void main(String[] args) {
    Sourceable source = new Source();
    Sourceable obj = new Decorator(source);
    obj.method();
    }
    }
    输出:

    before decorator!
    the original method!
    after decorator!

    装饰器模式的应用场景:

      1、需要扩展一个类的功能。

      2、动态的为一个对象增加功能,而且还能动态撤销。(继承不能做到这一点,继承的功能是静态的,不能动态增删。)

      缺点:产生过多相似的对象,不易排错!

  • 相关阅读:
    HLG 1522 子序列的和【队列的应用】
    POJ 3273 Monthly Expense【二分】
    HDU 4004 The Frog's Games 【二分】
    POJ 2001 Shortest Prefixes【第一棵字典树】
    POJ 2823 Sliding Window【单调对列经典题目】
    HDU 1969 Pie 【二分】
    POJ 3125 Printer Queue【暴力模拟】
    POJ 3250 Bad Hair Day【单调栈】
    字典树【模板】
    验证码 Code
  • 原文地址:https://www.cnblogs.com/juniorjava/p/7833722.html
Copyright © 2011-2022 走看看