装饰器模式

1.装饰器模式
  • 一种用于代替继承的技术,无需通过继承增加子类就能扩展对象的新功能。使用对象的关联关系代替继承关系,更加灵活,同时避免类型体系的快速膨胀。
    优点:
  • 灵活性:装饰器模式将功能切分成一个个独立的装饰器,在运行期可以根据需要动态的添加功能,甚至对添加的新功能进行自由的组合;
  • 扩展性:当有新功能要添加的时候,只需要添加新的装饰器实现类,然后通过组合方式添加这个新装饰器,无需修改已有代码,符合开闭原则;
    与代理模式的区别:
  • 装饰器模式偏重对原对象功能的扩展,扩展后的对象仍是是对象本身;然而代理模式偏重因自己无法完成或无需关心,需要他人干涉事件流程,更多的是对对象的控制。
    IO 中输入流和输出流的设计:

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(“c://a.txt”)));

在这里插入图片描述

2.创建接口Girl

在这里插入图片描述

package org.example.decorator;

public interface Girl {
    public void fair();

    public void clothes();
}
3.创建实现类LadyGaga
package org.example.decorator;

public class LadyGaga implements Girl{
    @Override
    public void fair() {
        System.out.println("白色的头发。。。");
    }

    @Override
    public void clothes() {
        System.out.println("牛肉护体。。。");
    }
}

4.创建装饰器类LovelyGirl
package org.example.decorator;

public class LovelyGirl implements Girl{
    Girl girl;

    public LovelyGirl(Girl girl) {
        this.girl = girl;
    }

    @Override
    public void fair() {
        System.out.println("红色的头发。。。");
        girl.fair();
    }

    @Override
    public void clothes() {
        System.out.println("蕾丝裙。。。");
        girl.clothes();
    }
}

5.创建装饰器类SexGirl
package org.example.decorator;

public class SexGirl implements Girl{
    Girl girl;

    public SexGirl(Girl girl) {
        this.girl = girl;
    }

    @Override
    public void fair() {
        System.out.println("黄色的头发。。。");
        girl.fair();
    }

    @Override
    public void clothes() {
        System.out.println("迷你短裙。。。");
        girl.clothes();
    }
}

6.创建装饰器类PureGirl
package org.example.decorator;

public class PureGirl implements Girl{
    Girl girl;

    public PureGirl(Girl girl) {
        this.girl = girl;
    }

    @Override
    public void fair() {
        System.out.println("紫色的头发。。。");
        girl.fair();
    }

    @Override
    public void clothes() {
        System.out.println("连衣裙。。。");
        girl.clothes();
    }
}

7.创建测试类
package org.example.decorator;

public class Test {
    public static void main(String[] args) {
        Girl girl = new LovelyGirl(new SexGirl(new PureGirl(new LadyGaga())));
        girl.fair();
        girl.clothes();
    }
}

8.查看打印

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值