软件编程
位置:首页>> 软件编程>> java编程>> Java中常用的设计模式之装饰器模式详解

Java中常用的设计模式之装饰器模式详解

作者:Asurplus、  发布时间:2021-08-28 07:59:15 

标签:Java,设计模式,装饰器模式

优点

1.装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能。

缺点

2.多层装饰比较复杂。

使用场景

1.扩展一个类的功能。

2.动态增加功能,动态撤销。

一、实现方式

假设一个场景,我们房间每天起床都要刷牙, 睡觉也要刷牙,刷牙的动作就是一个装饰器的作用,这样更利于我们的口腔健康。接下来我们就看看具体的装饰器如何实现。

1、每天生活的接口

package com.asurplus.common.decorator;
/**
* 每天的生活接口
*/
public interface Live {
   /**
    * 每天需要做的事情
    */
   void live();
}

2、起床的实现类

package com.asurplus.common.decorator;
import lombok.extern.slf4j.Slf4j;
/**
* 起床实现类
*/
@Slf4j
public class GetUpLive implements Live {
   @Override
   public void live() {
       log.info("起床了");
   }
}

3、睡觉的实现类

package com.asurplus.common.decorator;
import lombok.extern.slf4j.Slf4j;
/**
* 睡觉实现类
*/
@Slf4j
public class SleepLive implements Live {
   @Override
   public void live() {
       log.info("睡觉了");
   }
}

4、装饰器类

package com.asurplus.common.decorator;
import lombok.extern.slf4j.Slf4j;
/**
* 装饰器类
*/
@Slf4j
public class LiveDecorator {
   private Live live;
   public LiveDecorator(Live live) {
       this.live = live;
   }
   public void live() {
       // 生活
       live.live();
       // 刷牙
       brushTeeth();
   }
   private void brushTeeth() {
       log.info("刷牙去咯");
   }
}

二、测试

package com.asurplus.common.decorator;
/**
* 装饰器模式
*/
public class TestMain {
   public static void main(String[] args) {
       // 起床
       LiveDecorator getUp = new LiveDecorator(new GetUpLive());
       getUp.live();
       System.out.println();
       // 睡觉
       LiveDecorator sleep = new LiveDecorator(new SleepLive());
       sleep.live();
   }
}

输出结果

Java中常用的设计模式之装饰器模式详解

可以看出,起床和睡觉,都刷了牙,从而实现了我们的装饰器模式。

来源:https://lizhou.blog.csdn.net/article/details/123152191

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com