2025年装饰器模式

装饰器模式1 装饰器模式 一种用于代替继承的技术 无需通过继承增加子类就能扩展对象的新功能 使用对象的关联关系代替继承关系 更加灵活 同时避免类型体系的快速膨胀 优点 灵活性 装饰器模式将功能切分成一个个独立的装饰器 在运行期可以根据需要动态的添加功能 甚至对添加的新功能进行自由的组合

大家好,我是讯享网,很高兴认识大家。
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.查看打印

在这里插入图片描述

小讯
上一篇 2025-03-09 13:33
下一篇 2025-03-24 16:24

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/42853.html