装饰器模式(包裹模式)

装饰器模式的形象理解油漆工刷油漆。油漆工是装饰器角色,被刷者是被装饰器角色。

装饰器分四个角色

抽象构件角色:增加附加功能的一个抽象接口。也就是被装饰的一个抽象角色。

具体构件角色:抽象构件角色的实现类。

装饰器角色:持有抽象构件觉得一个变量引用。切也要与抽象构件角色同一接口。

具体装饰器角色:装饰器角色的实现类。具体附加功能到抽象角色。

说了这么多。。还是用实例来描述比较形象。下面一女孩子不同穿着来说明

譬如女孩子喜欢穿裙子。喜欢咋马尾辫。不同打扮。但是这个女孩子还是没有变。

//女孩接口

public interface Girl{

   //女孩子逛街行为

   public void goShopping();

}

//具体实现类 

public class Interface GirlImpl{

   public void goShopping(){

     System.out.println("今天我就逛逛街,亲爱的陪陪我嘛,陪我,我就嫁给你...哈哈");

 }

}

 

//装饰器的抽象类。定义抽象的父类接口

public interface DecorationGirl extends Girl{

 

}

 

//穿LV 裙子的装饰的女孩子

public class SkirtDecorationGirl implements DecorationGirl{

  //女孩子对象的引用属性

  private Girl girl;

  

  public SkirtDecorationGirl(Girl girl){

       this.girl=girl;

 }

  private void wearSkirt(){

    System.out.println("亲爱的,谢谢你。我今天要穿你送给我的LV裙子逛街...");

}

 

public void goShopping(){

   wearSkirt();

   girl.goShopping();

}

}

 //既穿LV裙子。又骑捷安特的自行车的女孩子。还是女孩子

public class GiantBikeGirl extends SkirtDecoration{

    public GiantBikeGirl(Girl girl){

         super(girl);

   }

 

   private void bikeGiant(){

         System.out.println("我今天要骑你送给我的捷安特的自行车。这车好便宜啊。才5000多!");

}

 

 public void goShopping(){

         bikeGiant();

         girl.goShopping();

}

}

 

//客户端调用

public class Client{

   public static void main(String arg[]){

    Girl girl = new GirlImpl();

    Girl skirtGirl = new SkirtDecorationGirl (girl);

   Girl giantGirl = new GiantBikeGirl(skirtGirl);

    //只穿裙子的女孩子逛街

   skirtGirl.goShopping();

   //又穿裙子。又骑自行车的女孩子逛街

  giantGirl.goShopping();

 }

}

 

//穿裙子逛街的女孩子

亲爱的,谢谢你。我今天要穿你送给我的LV裙子逛街...

今天我就逛逛街,亲爱的陪陪我嘛,陪我,我就嫁给你...哈哈

//既骑车又穿裙子的逛街的女孩子

我今天要骑你送给我的捷安特的自行车。这车好便宜啊。才5000多!"

亲爱的,谢谢你。我今天要穿你送给我的LV裙子逛街...

今天我就逛逛街,亲爱的陪陪我嘛,陪我,我就嫁给你...哈哈

GiantBikeGirl 和SkirtDecorationGirl 可以任意组合。可以得出不同打扮的女孩子逛街。总之不管是什么穿着。都是这个女 孩子。不会改变。

应用场景:

1, 需要扩展一个类的功能或者附件责任同时也可以撤销一个类的动态的功能。

2.需要增加一些基本的功能的排列组合而产生的大量的功能时。

有点:

1,很方便的扩展一个类的功能。同时比继承更具灵活性。

2.可以排列组合装饰类产生大量的新增功能。

缺点:

 由于装饰器类设计组合灵活性导致比继承更容易出错。

备注:装饰器的模式的核心就是接口要统一.基本行为还是抽象构件的行为。所以要持有被装饰角色的引用。

采用PyQt5框架与Python编程语言构建图书信息管理平台 本项目基于Python编程环境,结合PyQt5图形界面开发库,设计实现了一套完整的图书信息管理解决方案。该系统主要面向图书馆、书店等机构的日常运营需求,通过模块化设计实现了图书信息的标准化管理流程。 系统架构采用典型的三层设计模式,包含数据存储层、业务逻辑层和用户界面层。数据持久化方案支持SQLite轻量级数据库与MySQL企业级数据库的双重配置选项,通过统一的数据库操作接口实现数据存取隔离。在数据建模方面,设计了包含图书基本信息、读者档案、借阅记录等核心数据实体,各实体间通过主外键约束建立关联关系。 核心功能模块包含六大子系统: 1. 图书编目管理:支持国际标准书号、中国图书馆分类法等专业元数据的规范化著录,提供批量导入与单条录入两种数据采集方式 2. 库存动态监控:实时追踪在架数量、借出状态、预约队列等流通指标,设置库存预警阈值自动提醒补货 3. 读者服务管理:建立完整的读者信用评价体系,记录借阅历史与违规行为,实施差异化借阅权限管理 4. 流通业务处理:涵盖借书登记、归还处理、续借申请、逾期计算等标准业务流程,支持射频识别技术设备集成 5. 统计报表生成:按日/月/年周期自动生成流通统计、热门图书排行、读者活跃度等多维度分析图表 6. 系统维护配置:提供用户权限分级管理、数据备份恢复、操作日志审计等管理功能 在技术实现层面,界面设计遵循Material Design设计规范,采用QSS样式表实现视觉定制化。通过信号槽机制实现前后端数据双向绑定,运用多线程处理技术保障界面响应流畅度。数据验证机制包含前端格式校验与后端业务规则双重保障,关键操作均设有二次确认流程。 该系统适用于中小型图书管理场景,通过可扩展的插件架构支持功能模块的灵活组合。开发过程中特别注重代码的可维护性,采用面向对象编程范式实现高内聚低耦合的组件设计,为后续功能迭代奠定技术基础。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值