zoukankan      html  css  js  c++  java
  • 装饰器模式

    设计模式的意义在于:面向业务内容、业务数据结构和系统架构,高内聚低耦合、优雅的将平面逻辑立体化。

     1 package designPattern;
     2 /**
     3  * 装饰器模式
     4  * @author Administrator
     5  */
     6 public class B12_DecoratorTest {
     7 
     8     /**
     9      *  动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。
    10      *  适用于
    11      *  1,在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责.
    12      *  2,处理那些可以撤消的职责.
    13      *  3,当不能采用生成子类的方法进行扩充时.
    14      */
    15     public static void main(String[] args) {
    16         ManDecortor man=new ManDecortor();
    17         Man1 man1=new Man1();
    18         Man2 man2=new Man2();
    19         man1.setP(man);
    20         man1.eat();
    21         man2.setP(man1);
    22         man2.eat();
    23     }
    25 }
    26 //1.Component 定义一个对象接口,可以给这些对象动态地添加职责。
    27 interface PersonDecorator
    28 {
    29     void eat();
    30 }
    31 //2.ConcreteComponent 定义一个对象,可以给这个对象添加一些职责。
    32 class ManDecortor implements PersonDecorator
    33 {
    34     public void eat()
    35     {
    36         System.out.println("||||||||||");
    37         System.out.println("男人在吃...");
    39     }
    40 }
    41 //3.Decorator 维持一个指向Component对象的指针,并定义一个与Component接口一致的接口
    42 abstract class Decorator implements PersonDecorator
    43 {
    44     protected PersonDecorator p;
    45     
    46     public void setP(PersonDecorator p) {
    47         this.p = p;
    48     }
    49     public void eat() {
    50         p.eat();        
    51     }    
    52 }
    53 // 4.ConcreteDecorator 向组件添加职责
    54 class Man1 extends Decorator
    55 {
    56     public void eat() {
    57         super.eat();
    58         System.out.println("======");
    59         System.out.println("男人111在吃...");
    60     }
    61 }
    62 class Man2 extends Decorator
    63 {
    64     public void eat() {
    65         super.eat();
    66         System.out.println("~~~~~~");
    67         System.out.println("男人222在吃...");
    68         reEat();
    69     }
    70     public void reEat()
    71     {
    72         System.out.println("再吃一顿...");
    73     }
    74 }

    环境:JDK1.6,MAVEN,tomcat,eclipse

    源码地址:http://files.cnblogs.com/files/xiluhua/designPattern.rar

    欢迎亲们评论指教。

  • 相关阅读:
    OpenStack 数据库操作 demo
    python 实现获取电脑IP、主机名、Mac地址
    openvswitch BFD 简介
    Python 获取主机名
    OpenvSwitch完全使用手册
    ovs datapath笔记
    openstack 实用命令
    表示数值的字符串 牛客网 剑指Offer
    反转单词顺序列 牛客网 剑指Offer
    第一个只出现一次字符的位置 牛客网 剑指Offer
  • 原文地址:https://www.cnblogs.com/xiluhua/p/4413765.html
Copyright © 2011-2022 走看看