首页 > 其他分享 >Datawhale组队学习——大话设计模式Task02学习笔记

Datawhale组队学习——大话设计模式Task02学习笔记

时间:2022-12-17 01:11:26浏览次数:61  
标签:设计模式 对象 代理 Datawhale 算法 例子 模式 Task02 装饰

Task02:策略、装饰、代理

个人抽象理解:

  • 策略:灵活多变的算法实现规则
  • 装饰:把类的核心职责和装饰功能区分开了,去除相关类中重复的装饰逻辑;把类中的装饰功能从类中搬移去除,简化了原有的类;
  • 代理:不变直接访问,创造一个“中间代理”

策略模式

例子

实现一个商场收银软件程序,营业员可以通过输入客户所有购买商品的单价和数量,程序自动计算出总金额。

结构组成

策略模式由三类主要角色组成:

  • 策略类:定义所有支持算法的公共接口,在这个例子中具体为收费抽象类;
  • 具体策略类:具体的算法,在这个例子中具体为各类收费类和折扣优惠收费类;
  • 上下文类:维护对策略对象的应用。

适用场景

一个系统中有多个算法和类很相似,区分这些类和算法的只是其内部行为

实际应用

在导航应用中,有不同的路径规划算法,如针对步行的、骑行的、搭乘公共交通工具的、以及开车的等。主要导航类的主要工作是在地图上渲染出规划好的路径,并不会在意是由和算法生成的路径。此时可以将路径规划算法使用策略模式进行封装,方便与主要导航类的交互。

优点缺点

优点:

  • 可以以相同的方式调用所有算法,减少了各种算法类与使用算法类之间的耦合。策略模式的Strategy类层次为Context类定义了一系列的可供重复使用的算法或行为,继承有助于析取这些算法中的公共功能。
  • 简化了单元测试。每个算法都有自己的类,可以通过自己的接口单独测试;
  • 符合“开放封闭原则”,无需对上下文进行修改就可以引入新的策略。

缺点:

  • 不适合算法极少发生改变的场景,会使得程序整体过于复杂;
  • 要求客户端必须知晓策略间的不同,因为需要从中选择;

装饰模式

何时用?

需要将所需功能按正确的顺序串联起来进行控制,此时可以考虑使用装饰模式

例子

使用程序写一个可以给人搭配不同服饰的系统

结构组成

装饰模式由四类主要角色组成:

  • 实体接口:对象接口的定义,可以为对象动态添加职责,在这个例子中职责具体为形象展示的过程,由于Person类在此程序中只有形象展示这一个职责,Person类既是访问接口,也是实体类;
  • 实体类:在这个例子中具体为Person类;
  • 装饰抽象类:继承实体接口,动态扩展其职责,在这个例子中具体为服饰抽象类;
  • 具体装饰类:装饰的具体实现,在这个例子中具体为各类服饰类,如大T恤,大垮裤等。

适用场景

可以在不生成很多子类的情况下扩展类,适用于扩展类需求较多,而又不想引起子类膨胀的场景。

实际应用

通知信息有多种渠道,如通过短信、微信、QQ、邮件等。不同的信息会采用不同的多种渠道组合进行通知,此时若对每一个组合都建立子类,会造成子类数量爆炸,可以考虑装饰器模式。

优点缺点

优点:

  • 把类中的装饰功能从类中搬移去除,很好地简化了原有的类;
  • 有效地把类的核心职责和装饰功能区分开了,可以去除相关类中重复的装饰逻辑;
  • 装饰类和被装饰类可以独立发展,不会相互耦合;
  • 无需创建新子类即可实现对类功能的动态扩展;
  • 支持运行时添加或删除对象的功能;
  • 满足“单一职责原则”,可将实现许多不同行为的类拆分为多个较小的类。

缺点:

  • 在封装器栈中删除特定封装器比较困难;
  • 较难实现行为不受到先后顺序影响的装饰;
  • 各装饰层的代码相对冗余。

代理模式

定义:代理模式(Proxy Pattern)是指实现一个类代表另一个类的功能,为其他对象提供一种代理以控制对这个对象的访问。

何时用?

  • 本地执行远程服务(远程代理):适用于服务对象位于远程服务器上的情形,可以为一个对象在不同的地址空间提供局部代表。
  • 延迟初始化(虚拟代理):如果你有一个偶尔使用的重量级服务对象,一直保持该对象运行会消耗系统资源时,可使用代理模式。
  • 访问控制(保护代理/安全代理):如果只希望特定客户端使用服务对象,对象可以是操作系统中的重要部分,而客户端则是各种已启动程序,可使用代理模式。
  • 记录日志请求(日志记录代理):适用于需要保存对于服务对象的请求历史记录时。
  • 缓存请求结果(缓存代理):适用于需要缓存客户请求结果并对缓存生命周期进行管理时,特别是返回结果体积非常大时。
  • 智能指引:调用真实对象时,代理处理另外一些事,可在没有客户端使用某个重量级对象时,立刻销毁该对象。

例子

卓贾易委托戴励追求娇娇

结构组成

代理模式由三类主要角色组成:

  • 访问接口:在这个例子中具体为送礼物的行为;
  • 实体类:在这个例子中具体为追求者;
  • 替代实体的代理类:在这个例子中具体为代理。

适用场景

不方便直接访问对象时,为不宜直接访问的对象提供一个访问层。

实际应用

  • 信用卡是银行账户的代理,而银行账户则是一大捆现金的代理。它们都可以实现相同的支付功能。
  • windows里的快捷方式。
  • 客户端对数据库的查询有时要消耗大量系统资源,常在有需要时才创建(延迟初始化),这会带来代码的大量重复。可以创建代理,让代理伪装成数据库对象,在客户端或实际数据库对象不知情的情况下处理延迟初始化和缓存查询结果的工作。

优点缺点

优点:

  • 引入代理后,职责清晰;
  • 引入代理后,可扩展多种用途,如:
    ① 远程代理可以隐藏一个对象存在于不同地址空间的事实。
    ② 虚拟代理可以存放实例化时间很长的真实对象。
  • 符合“开放封闭原则”,无需对上下文进行修改就可以引入新的策略。

缺点:

  • 代码可能变得复杂,因为需要新建许多类;
  • 服务响应可能会延迟。

Sweetalk Design Pattern

标签:设计模式,对象,代理,Datawhale,算法,例子,模式,Task02,装饰
From: https://www.cnblogs.com/ChangciWei/p/16988556.html

相关文章

  • 【设计模式】行为型模式之备忘录模式
    对当前的状态进行保存,封装成一个状态类,使用另一个状态管理者对当前角色的某些状态进行保存(只限于保存,不能修改)一般来说,会先定义一个状态接口,使用时会在需要保存状态的类......
  • 设计模式--行为型模式
    行为型模式模板模式在含有继承结构的代码中,模板方法模式是非常常用的。用一个统一的父类实现定义所有的方法和接口。不同的子类来完成自己具体的实现。父类定义了骨架(调......
  • 设计模式--创建型模式
    创建型模式      创建型模式的作用就是创建对象,说到创建一个对象,最熟悉的就是new一个对象,然后set相关属性。但是,在很多场景下,我们需要给客户端提供更加友......
  • 设计模式--结构型模式
    结构型模式建型模式介绍了创建对象的一些设计模式,这节介绍的结构型模式旨在通过改变代码结构来达到解耦的目的,使得我们的代码容易维护和扩展。代理模式第一个要介绍的代......
  • 我学设计模式 之 观察者模式
      观察者(Observer)模式1.观察者模式介绍      观察者模式是对象行为模式,又叫做发布-定义模式、模型-视图模式、源-监听器模式或从属者模式。       观察......
  • Datawhale数据分析教程来了!
    贡献者:陈安东、金娟娟、杨佳达、老表开源初心当我入门数据分析时,用的是鼎鼎大名的《pythonfordataanalysis》,书中对技术操作讲解细致,但遗憾的是,对于数据分析的逻辑介绍就......
  • Datawhale团队第三期录取名单!
     Datawhale团队 公示:Datawhale组织成员Datawhale已经成立一年半了,从一开始的12个人,学习互助,到提议建立开源组织,做更多开源的事情,帮助更多学习者,也促进我们更好地成长。于......
  • 程序设计模式急救笔记
    打完游戏发现考试内容一点没看,紧急抢救,精神状态不甚正常,慎读。例子有的不是很好,为了考试的时候抄个UML图方便罢了。0.UML图1.关联关系类A用到了类B,A->B类A用到了类B......
  • 说说设计模式~ 观察者模式与消费者模式的区别
    ​​返回目录​​再说概念这两个模式确实有点相似,都为了实现程序的解耦产生的,观察者一般又称发布/订阅模式,它一般是有一个主题对象,然后有多个订阅者去关注它,当它的状态发生......
  • 行为型:设计模式之解释器模式(二十二)
     虽然目前计算机编程语言有好几百种,但有时候我们还是希望能用一些简单的语言来实现一些特定的操作,我们只要向计算机输入一个句子或文件,它就能够按照预先定义的文法规则来对......