设计模式-装饰者模式

查看设计模式目录:https://blog.csdn.net/qq_52681418/article/details/114828850

设计模式-装饰者模式

创建一个包装类装饰现有类,在不改变原有类的情况下扩展该类,比生成子类更灵活。

IO 流使用的就是装饰者模式。

现在假设你有一个物品,你来使用装饰者模式为其装饰上颜色:

为了表明装饰器可装饰物品,装饰器、物品都继承一个父接口。

public interface ParentInterFace {
   void show();
}

1.你的物品

public class Goods implements ParentInterFace {
    public void show() {
        System.out.println("这是一个无色物品");
    }
}

2.你的抽象装饰器,它能够对物品装饰

为什么物品是接口类型而不是Goods呢,因为你的物品可能不止一种,抽象装饰器表明它可以装饰了。

public class Decker implements ParentInterFace {

    protected ParentInterFace goods;

    //传入目标类
    public Decker(ParentInterFace goods) {
        this.goods= goods;
    }

    //装饰的方法,此处不装饰,在子类中实际装饰
    public void show() {
         goods.show();
    }
}

3.你的实际装饰器(2个)

1.绿色装饰器

public class DeckerGreen  extends Decker{

   public DeckerGreen(ParentInterFace shape) {
       super(shape);
   }

   @Override //实际装饰
   public void show() {
       super.show();
       System.out.println("---装饰绿色---");
   }
}

2.红色装饰器

public class DeckerRed extends Decker {

   public DeckerRed(ParentInterFace goods) {
       super(goods);
   }

   @Override   //实际装饰
   public void show() {
       goods.show();
       System.out.println("---装饰红色---");
   }
}

开始装饰

public class Main {

    public static void main(String[] args) {
        ParentInterFace goods1 = new Goods();             //创建一个物品
        ParentInterFace goods2 = new DeckerRed(goods1);   //装饰红色
        ParentInterFace goods  = new DeckerGreen(goods2); //装饰绿色
        goods.show();//输出结果
    }
    
}

装饰结果
在这里插入图片描述

装饰者模式和代理模式相似。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值