六,设计模式之-装饰器模式(Decorator Pattern)

一,介绍

       概念:允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。

       意图:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活。

       作用:一般的,我们为了扩展一个类经常使用继承方式实现,由于继承为类引入静态特征,并且随着扩展功能的增多,子类会很膨胀。

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

       缺点:多层装饰比较复杂。

二,例子

       1,创建接口类

public interface ISinger {
    public void doo();
}

      ,2,实现接口的实体类

public class RockSinger implements ISinger{

    @Override
    public void doo() {
        System.out.println("摇滚歌手");
    }

}

       3,创建装饰类

public class Decorator implements ISinger{
    private ISinger singer;
    public  Decorator(ISinger singer) {
        this.singer = singer;
    }

    @Override
    public void doo() {
        singer.doo();
    }
    
}

       4,扩展装饰类1

public class Decorator_one extends Decorator {

    public Decorator_one(ISinger singer) {
        super(singer);
    }

    @Override
    public void doo() {
        super.doo();
        sing();
    }
    public void sing() {
        System.out.println("喜欢唱高亢的歌曲。");
    }
    

}

       5,扩展装饰类2

public class Decorator_two extends Decorator {

    public Decorator_two(ISinger singer) {
        super(singer);
    }

    @Override
    public void doo() {
        super.doo();
        sing();
    }
    public void sing() {
        System.out.println("喜欢喜欢弹吉他。");
    }
    

}

      6,测试类

public class Test {
    public static void main(String[] args) {
        RockSinger singer = new RockSinger();
        Decorator_two two = new Decorator_two(new Decorator_one(singer));
        two.doo();
                
    }

}

三,说明

   为了扩展不同的功能可以创建不同的装饰扩展类。

      使用场景: 1、扩展一个类的功能。 2、动态增加功能,动态撤销。

      注意事项:可代替继承。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值