您现在的位置是:亿华云 > 人工智能

巧妙的运用装饰器,让你的代码高出一个逼格!

亿华云2025-10-03 11:41:35【人工智能】1人已围观

简介一、介绍装饰器模式,顾名思义,就是在一个类上增加功能,以起到装饰的作用。我们都知道,如果想给某个类新增功能,但又要避免在原类上修改代码,最常用的方式就是新增一个类来继承目标类,但是如果增加多的话,会使

一、巧妙介绍

装饰器模式,运代码顾名思义,用装就是饰器在一个类上增加功能,以起到装饰的高出个逼格作用。

我们都知道,巧妙如果想给某个类新增功能,运代码但又要避免在原类上修改代码,用装最常用的饰器方式就是新增一个类来继承目标类,但是高出个逼格如果增加多的话,会使类的巧妙数量爆炸式增长,为管理带来巨大的运代码麻烦,装饰器模式就比较好地解决了这一点。用装

从设计的饰器角度看,装饰器模式涉及到四个角色:

被装饰类:要进行扩展的高出个逼格源类; 装饰器类:通过该类可以给被装饰类动态添加额外的方法,多以抽象为主; 具体的装饰类:该类实现自装饰器类,已完成完整的算法; 客户角色:客户类提出使用具体类的请求;

今天我们一起来看看深度了解一下装饰器的源码库玩法!

二、代码示例

下面以生产一件衣服为例,一块布料裁剪好了之后做出的衣服样子还可以,但是这样的衣服是卖不出去的,因为毫无美感,因此我们需要通过一些装饰来使衣服变得好看。

我们先来创建一个抽象类或者接口,定义一个骨架,如下:

/**  * 建立基本骨架  */ public interface Clothes {      void makeClothes(); } 

接着创建一个我们需要装饰的源类,如下:

/**  * 被装饰类  */ public class MakeClothes implements Clothes {      @Override     public void makeClothes() {          System.out.println("制作一件衣服");     } } 

再来创建我们的主角,装饰类,如下:

/**  * 装饰类  */ public class Decorator implements Clothes {      private Clothes clothes;     public Decorator(Clothes clothes) {          this.clothes = clothes;     }     @Override     public void makeClothes() {          clothes.makeClothes();     } } 

最后,分别创建两个具体的装饰类,如下:

/**  * 具体的装饰类  */ public class EmbroideryDecorator extends Decorator {      public EmbroideryDecorator(Clothes clothes) {          super(clothes);     }     @Override     public void makeClothes() {          super.makeClothes();         System.out.println("给衣服绣制花朵");     } }  /**  * 具体的装饰类  */ public class MickeyDecorator extends Decorator {      public MickeyDecorator(Clothes clothes) {          super(clothes);     }     @Override     public void makeClothes() {          super.makeClothes();         System.out.println("给衣服绘制米老鼠图案");     } } 

怎么用呢?请看下面的测试类:

/**  * 客户端  */ public class DecorateClient {      public static void main(String[] args) {          Clothes clothes = new MakeClothes();         clothes = new EmbroideryDecorator(clothes);//给衣服绣花         clothes = new MickeyDecorator(clothes);//给衣服添加米老鼠图案         clothes.makeClothes();         System.out.println("成品已经完成!");     } } 

输出结果如下:

制作一件衣服 给衣服绣制花朵 给衣服绘制米老鼠图案 成品已经完成 

制作一件衣服给衣服绣制花朵给衣服绘制米老鼠图案成品已经完成

从结果上,可以看到,我们成功的给MakeClothes这个类,动态添加了2个方法,香港云服务器一个是给衣服绣花,另一个是给衣服添加米老鼠图案,最后成品完成!

可见装饰的效果还不错~

三、应用

其实在 jdk 中,装饰者设计模式也有很多典型的场景应用,例如我们熟悉的io包中的字节输入、输出流,就用到了装饰者设计模式!

其中FilterInputStream、FilterOutputStream就是装饰类,用于动态给输入、输出流增加方法!

四、总结

巧妙采用装饰器模式,可以很好的解决类继承数量过多的问题,让代码清晰可读。

但是如果装饰层数过多,也会影响到代码的维护,因此在实际的使用过程中,还需灵活使用!

网站模板

很赞哦!(69)