秋招突击——设计模式补充——简单工厂模式和策略模式

文章目录

引言

  • 一个一个来吧,面试腾讯的时候,问了我单例模式相关的东西,自己这方面的东西,还没有看过。这里需要需要补充一下。
  • 但是设计模式有很多,今天就来了解简单工厂模式、策略模式以及单例模式的。
  • 道阻且长,一步一步来吧。
  • 这里所有的材料和截图都是来自于《大话设计模式》

正文

简单工厂模式

  • 对于程序开发中,容易改变的地方,应该考虑使用一个单独的类来做这个创建实例的过程,这就是工厂。
  • 使用一个factory作为工厂类,其中的成员代表它能够生产的产品的类别,然后具体的产生的样本是这个产品类别对应的具体的不同的实例对象。
    • 加减乘除等几个操作符号都是operation操作符号的子类,通过父类接口可以进行调用。

为什么叫做工厂

  • 个人理解,你给我一个加工指标,我给你一个对应的符合你指标的对象,然后统一用这些子类加工指标的父类进行处理。

策略模式

  • 定义了算法家族,分别封装起来,让他们之间可以互相替换
  • 该模式让算法的变化,不会影响到使用算法的客户。

具体结构图如下

  • 具体的所有的策略都是继承Strategy,然后具体实现对应的抽象方法,通过strategy接口来调用不同子类对象,实现多态
  • context会以父类成员实例对象作为成员函数,对应的构造函数中需要传入对应的strategy对象,然后在调用对应的接口。

具体调用图如下


  • 需要的在context中传入具体已经创建好的对象,也就是说对象是在接口界面创建的。
策略模式和工厂模式的结合
  • 将具体的工厂对象工厂的算法子类进行替换,context中返回的是结果,接受的是需要处理的不同对象,然后是通过单例模式调用的
    • 将对象的创建和接口信息统一转移到context文件中,
  • 简单工厂模式,让客户知道CashSuper以及对应的具体的现金工厂对象,相当于同时知道两个类。
  • 但是将策略模式和工厂模式融合之后,客户端只需要的知道cashcontext这一个策略上下文对象,进一步实现解耦。
策略模式解析
  • 针对完成功能相同==》输入和输出是相同,但是具体的实现逻辑和细节是不同的,所以需要以相同的方式调用所有的算法,减少各类算法和实用类之间的耦合度

优点

  • 策略模式的Strategy类层次为 Context定义了一系列可供重用的算法,继承有助于析取这些算法中的公共功能的

    • 不同的打折策略公共的功能,就接受金额,并返回金额。
  • 简化了单元测试,每一个算法都有自己的类,可以通过自己的接口单独测试

总结

  • 策略模式是用来封装算法的,不仅仅用来封装算法,可以封装几乎任何类型的规则
    • 只要在分析过程中,听到的需要在不同时间应用不同的业务规则,就可以考虑使用策略模式处理这种变化
  • 基本策略模式中,选择所用具体实现的职责给客户端对象承担,然后再将实例化之后的对象,转给策略模式的context对象

总结

  • 今天太晚了,太累了,上午面试的东西,下午花了很多时间去整理,然后有准备了一下奖学金的申领的内容。已经到深夜了。又没有刷算法,又没有完全看完,不过太累了。
  • 明天早点起,加油吧!
相关推荐
sg_knight4 小时前
Python 设计模式:迭代器模式——用优雅的方式遍历一切
python·设计模式·迭代器模式
ximu_polaris9 小时前
设计模式(C++)-行为型模式-解释器模式
c++·设计模式·解释器模式
钝挫力PROGRAMER9 小时前
static final 指向可变集合的设计模式
java·设计模式
霍格沃兹测试学院-小舟畅学12 小时前
我花一周拆解了企业级Skills库的全套设计模式
人工智能·设计模式
kyriewen1113 小时前
你的前端滤镜慢得像PPT?用Rust+WebAssembly,一秒处理4K图
开发语言·前端·javascript·设计模式·rust·ecmascript·powerpoint
混迹中的咸鱼13 小时前
C++ 23种设计模式
设计模式·c++23
咖啡八杯13 小时前
GoF设计模式——工厂方法模式
java·后端·设计模式
ximu_polaris1 天前
设计模式(C++)-行为型模式-中介者模式
c++·设计模式·中介者模式
诙_1 天前
深入理解C++设计模式
c++·设计模式
AI大法师1 天前
从门头到社媒预热图,快闪项目如何统一视觉输出
大数据·人工智能·设计模式