• java设计模式(装饰模式)


    装饰模式实现了可以动态地为原对象扩展方法

    装饰对象与被装饰的都实现了同一个接口(或抽象类)

    举个例子: 工作 可以边吃东西边工作,也可以边喝东西边工作,还可以工作的时候边吃边喝

    创建共同接口 WorkComponent

    1 package com.zhanghaobo.patterns;
    2 
    3 public interface WorkComponent {
    4     public void work();
    5 }

    具体工作(被装饰的对象)

    1 public class ConcreteWork implements WorkComponent {
    2 
    3     @Override
    4     public void work() {
    5         System.out.println("我正在工作");
    6 
    7     }
    8 
    9 }

    装饰类

     1 public class DecoratorWork implements WorkComponent {
     2     private WorkComponent work;
     3     public DecoratorWork(WorkComponent work){
     4         this.work=work;
     5     }
     6     @Override
     7     public void work() {
     8         work.work();
     9     }
    10 
    11 }

    装饰1(喝茶)

     1 public class DrinkDecorator extends DecoratorWork {
     2 
     3     public DrinkDecorator(WorkComponent work) {
     4         super(work);
     5     }
     6     @Override
     7     public void work() {
     8         super.work();
     9         drinkTea();
    10     }
    11     public void drinkTea(){
    12         System.out.println("顺便喝茶");
    13     }
    14     
    15 }

    装饰2(吃东西)

    public class EatDecorator extends DecoratorWork {
    
        public EatDecorator(WorkComponent work) {
            super(work);
        }
        
        @Override
        public void work() {
            super.work();
            eatSomething();
        }
        
        public void eatSomething(){
            System.out.println("顺便吃东西");
        }
    }

    TEST:

    public class Client {
        public static void main(String[] args) {
            //边喝茶边工作
            WorkComponent wc=new DrinkDecorator(new ConcreteWork());
            wc.work();
            System.out.println("================================");
            //边吃东西边工作
            WorkComponent wc1=new EatDecorator(new ConcreteWork());
            wc1.work();
            System.out.println("================================");
            //边吃边喝地工作
            WorkComponent wc2=new DrinkDecorator(new EatDecorator(new ConcreteWork()));
            wc2.work();
            System.out.println("================================");
            //边喝边吃地工作
            WorkComponent wc3=new EatDecorator(new DrinkDecorator(new ConcreteWork()));
            wc3.work();
        }
    }

    输出结果:

    我正在工作
    顺便喝茶
    ================================
    我正在工作
    顺便吃东西
    ================================
    我正在工作
    顺便吃东西
    顺便喝茶
    ================================
    我正在工作
    顺便喝茶
    顺便吃东西
  • 相关阅读:
    spring-pool.xml
    spring-jmx.xml
    spring-common.xml
    applicationContext.xml
    spring-webservice.xml
    webservice统一认证
    jdbc.properties
    oracle,mysql分页
    springmvc-servlet.xml
    四、用“”或构造函数创建Java的String区别
  • 原文地址:https://www.cnblogs.com/oldcownotGiveup/p/5383123.html
Copyright © 2020-2023  润新知