设计模式系列之--装饰者模式

装饰者模式

这种类型的设计模式属于结构型模式,它调整了代码结构。
装饰器模式顾名思义是将类进行包装增强的一种模式 ,他与桥接模式相反 桥接模式是类似于空出一块交给别人处理以实现扩展, 装饰者模式是将这个类,增加代码以实现扩展 可以说桥接模式是向内扩展 装饰者模式是向外扩展
他们的不同主要是:
1. 思路出发点的不同
2. 和桥接模式相反他的主要部分相当于是桥接模式中空出来的那一部分 那么扩展这一部分需要与原来部分相同(实现接口或继承原来父类类) 来保证他的性质(类的类型)不发生改变

以包装礼物为例


//Gift  礼物的抽象类
public abstract class Gift{
    private double size;
    private double price;

    public double getSize() {
        return size;
    }
    public void setSize(double size) {
        this.size = size;
    }
    public double getPrice() {
        return price;
    }
    public void setPrice(double price) {
        this.price = price;
    }
    public abstract double cost();
}
//礼物的实现类 对这个类进行包装 若要不同对的礼物可以写子类来设置不同的参数
public class GifteExtend extends Gift{
    public GifteExtend(){
        setPrice(100.5);
        setSize(500);
    }
    @Override
    public double cost() {
        return super.getPrice() + super.getSize();
    }
}
//装饰器类 将原来方法进行包装扩展功能 但是用户不应感觉到任何区别
//继承Gift类保证包装后的类的类型不发生改变
//通过构造器来传入被包装类来减小耦合
//若想设置不同类型的case来进行包装可以写一个子类设置不同的属性值
public class Case extends Gift{
    private Gift gift;  

    public Case(Gift gift){
  	    setPrice(100);
        setSize(500);
        this.gift = gift;
    }

//对目标方法进行增强
    @Override
    public double cost() {
        return gift.cost() + this.getPrice()*this.getSize();
}   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值