zoukankan      html  css  js  c++  java
  • 【设计模式】—— 装饰模式Decorator

      前言:【模式总览】——————————by xingoo

      模式意图

      在不改变原来类的情况下,进行扩展。

      动态的给对象增加一个业务功能,就功能来说,比生成子类更方便。

      应用场景

      1 在不生成子类的情况下,为对象动态的添加某些操作。

      2 处理一些可以撤销的职责。

      3 当不能使用生成子类来扩充时。

      模式结构

      Component 外部接口,用于定义外部调用的形式。提供默认的处理方法。

    interface Component{
         public void operation();
     }

      ConcreteComponent  具体的处理类,用于实现operation方法。

    class ConcreteComponent implements Component{
    
        @Override
        public void operation() {
            // TODO Auto-generated method stub
            System.out.println("ConcreteComponent operation()");
        }
        
    }

      Decorator 装饰类,内部关联一个component对象,调用其operation方法,并添加自己的业务操作。

    class Decorator implements Component{
        private Component component;
        @Override
        public void operation() {
            // TODO Auto-generated method stub
            System.out.println("before decorator!");
            component.operation();
            System.out.println("after decorator!");
        }
        public Decorator() {
            // TODO Auto-generated constructor stub
        }
        public Decorator(Component component){
            this.component = component;
        }
        
    }

      全部代码

     1 package com.xingoo.decorator;
     2 interface Component{
     3     public void operation();
     4 }
     5 class ConcreteComponent implements Component{
     6 
     7     @Override
     8     public void operation() {
     9         // TODO Auto-generated method stub
    10         System.out.println("ConcreteComponent operation()");
    11     }
    12     
    13 }
    14 class Decorator implements Component{
    15     private Component component;
    16     @Override
    17     public void operation() {
    18         // TODO Auto-generated method stub
    19         System.out.println("before decorator!");
    20         component.operation();
    21         System.out.println("after decorator!");
    22     }
    23     public Decorator() {
    24         // TODO Auto-generated constructor stub
    25     }
    26     public Decorator(Component component){
    27         this.component = component;
    28     }
    29     
    30 }
    31 
    32 
    33 public class test {
    34     public static void main(String[] args) {
    35         Component component = new Decorator(new ConcreteComponent());
    36         component.operation();
    37     }
    38 }

      运行结果

    before decorator!
    ConcreteComponent operation()
    after decorator!
  • 相关阅读:
    bzoj 1093: [ZJOI2007]最大半连通子图
    bzoj 1266 1266: [AHOI2006]上学路线route
    poj 2104 K-th Number
    洛谷 P3313 [SDOI2014]旅行
    cogs 306. [SGOI] 糊涂的记者
    cogs 1164. 跑步
    洛谷 1821: [JSOI2010]Group 部落划分 Group
    洛谷 U3357 C2-走楼梯
    洛谷 P3014 [USACO11FEB]牛线Cow Line
    洛谷 P2982 [USACO10FEB]慢下来Slowing down
  • 原文地址:https://www.cnblogs.com/xing901022/p/4063508.html
Copyright © 2011-2022 走看看