首页 > 其他分享 >设计模式之策略模式和工厂模式的区别

设计模式之策略模式和工厂模式的区别

时间:2024-07-09 17:44:36浏览次数:13  
标签:需要 策略 披萨 模式 工厂 培根 设计模式

1.前言

本篇博客转载于策略模式与工厂模式比较

2.区别

这段时间看了一些设计模式,看到策略模式与工厂模式的时候,总是感觉他们很相似,不要区分,到具体的场景了你可能还在徘徊到底用工厂还是策略呢?这几天就想写一篇关于策略模式与工厂模式区别的文章,但一直没思路,昨天跟淘宝mm聊了聊,今天早上思路顿时开阔。

当时我在说明策略模式与工厂模式区别的时候举了一个例子。说你要去买件衣服,给你50块钱,策略模式的做法就是去京东、当当、淘宝、卓越等网上去看,然后决定要买那一件。而工厂模式的做法确实,告诉系统我需要用50块钱买件衣服,到底他去当当、淘宝、京东、卓越你不关心,你只需要50块钱的一件衣服。淘宝mm一语道出工厂相当于黑盒子,策略相当于白盒子。呵呵,佩服。总结得很精炼。今天早上醒来就在想这问题,老感觉昨天自己的比喻有点绕在概念之中,别人可能不认真分析可能还是很难理解他们的区别。所以就重新设计了一个小实例。

工厂模式:有一天你决定去吃披萨,一看菜单,哦,种类很多呀,你就点了个培根披萨,过了二十分钟,你的披萨就来了就可以吃到了。但这个披萨是怎么做的,到底面粉放了多少,培根放了多少,佐料放了多少,有多少到工序,你是不需要管的,你需要的是一个美味培根披萨。

策略模式:同样还是在披萨店,你要一个培根披萨,老板说想吃自己去做吧。原料有培根、面粉、佐料。工序有1、2、3工序,你自己去做吧。然后你就需要自己去做,到底放多少培根,放多少面粉,放多少佐料,这都你自己来决定,工序1、2、3,你是怎么实现的,都你自己决定。最后你得到了披萨。

一般情况下,策略模式是为了解决的是策略的切换与扩展,更简洁的说是定义策略族,分别封装起来,让他们之间可以相互替换,策略模式让策略的变化独立于使用策略的客户。可以应用的场景有优惠系统、工资计算系统等。上例中,你可以自己做多种口味的披萨的,青菜的,牛肉的,海鲜的你都可以一次都做。而工厂模式主要解决的是资源的统一分发,将对象的创建完全独立出来,让对象的创建和具体的使用客户无关。主要应用在多数据库选择,类库文件加载等。上例中你可以点很多披萨,只要披萨店给提供的,你都可以点。很明显的是策略模式是开放的,作为一个主体你的活动范围是全程的,大多数事情要你自己亲力亲为。而工厂模式作是封闭的,作为主体的你的活动范围是有限的,很多事情都帮组你做好了,你直接“点”就可以了。

想到这里,我突然想云计算跟传统电脑模式的联系。

传统的电脑模式,你需要写程序,你得自己去装个eclips,你需要ps图片,你需要去装个photoshop,你需要看电影,你得装一个看电影软件。这就是典型的策略模式,什么东西必须你自己动手去实现。

而云计算,我需要写程序,云就跟你说,亲这里有eclips,你可以直接用了。你需要看电影,云就跟你说,亲,这里有pplive,你可以直接看电影,你需要美图,云说,亲,这里有美图秀秀,能帮你的照片变得很漂亮的哦。这就是典型的工厂模式。

3.自己的感悟

我感觉这个例子也有点儿偏差,工厂和策略都是处理相近产品,而策略侧重对内部的封装,但是不是在抽象就具体而言了,而工厂主要是再抽象,让不同的对象处理不同的逻辑(单一职责原则),不同的对象之间可能包含重复代码(逻辑)。就按照作者的例子而言 工厂模式:有一天你决定去吃披萨,一看菜单,哦,种类很多呀,你就点了个培根披萨,过了二十分钟,你的披萨就来了就可以吃到了。但这个披萨是怎么做的,哪个厨师做的?到底面粉放了多少?培根放了多少?有多少到工序?你是不需要管的,你需要的是一个美味培根披萨。 策略模式:同样还是在披萨店,你要一个培根披萨,老板就问,培根披萨有三位厨师制作。有酸辣味,芝士味等,请问你选择谁制作的,什么口味,都你自己决定。最后你得到了披萨。

标签:需要,策略,披萨,模式,工厂,培根,设计模式
From: https://www.cnblogs.com/booleandev/p/18292443/the-difference-between-the-strategy-mode-of-

相关文章

  • 数据仓库Kimball模式
    数据仓库模式是构建和设计数据仓库的方法论,而Kimball的数据仓库模式是其中一种常用的模式。Kimball的数据仓库模式以业务过程为核心,通过将数据组织成星型模型或雪花模型,实现数据的快速查询和分析。以下是对Kimball模式的简介、优势和适用场景的介绍。简介:Kimball的数据仓库模......
  • tp6的多应用模式访问隐藏应用名
    tp6的多应用模式,在访问url的时候,要加上应用的名字,对于输入url十分不方便。下面介绍三种隐藏url中的应用名的方法1,入口文件绑定应用名在入口文件中,绑定默认运行的应用将$response=$http->run();修改为//$response=$http->run();$response=$http->name(‘index’)->run();2......
  • 设计模式六大原则
    一、单一职责原则(SingleResponsibilityPrinciple)定义:一个类只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个引起它变化的原因。问题由来:类T负责两个不同的职责:职责P1,职责P2。当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常的职责P2......
  • Holder模式(Holder Pattern):公司员工权限管理系统实战案例分析
    肖哥弹架构跟大家“弹弹”业务中设计模式的使用,需要代码关注欢迎点赞,点赞,点赞。关注公号Solomon肖哥弹架构获取更多精彩内容在一个大型公司中,员工根据其职位和部门被赋予不同的权限。这些权限可能包括访问敏感数据、审批财务报告、提交报销等。随着公司规模的增长......
  • Android面试题之Activity的启动模式和flag
    本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点Activity中的几种启动模式activity的几种启动模式是android中常考的知识点,一般会考察有哪几种启动模式,以及每种启动模式在什么场景下使用:standard:这个是android......
  • AES-CBC模式加解密(Python)
    importbase64try:fromCrypto.CipherimportAESfromCrypto.Util.Paddingimportpad,unpadexceptImportError:print('请安装加解密库pycryptodome')classAesSample(object):def__init__(self):self.key='MbQeThWmZq4t6w9......
  • [JS]设计模式
    介绍设计模式就是在面向对象软件设计过程中,针对特定问题的简洁而优雅的解决方案目前说到设计模式,一般指<设计模式:可复用面向对象软件的基础>一书中提到的23种常见软件设计模式工厂模式在JavaScript中,工厂模式的表现形式就是一个调用即可返回新对象的函数<scri......
  • 一文彻底带你搞懂什么是适配器模式!!
    一文彻底带你搞懂什么是适配器模式!!什么是适配器模式?适配器的两种实现方式适用情况代码示例背景类适配器对象适配器IO流中的实际应用应用扩展总结什么是适配器模式?适配器模式(AdapterPattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,......
  • KMP算法实例——模式匹配
    题目描述:给定两个字符串,一个是文本串txt,另一个是模式串pat。请使用KMP算法找出模式串在文本串中的所有出现位置。示例输入:文本串 txt:"ABABDABACDABABCABAB"模式串 pat:"ABABCABAB"#include<stdio.h>#include<string.h>//计算模式串的最长公共前后缀数组voidco......
  • 智慧安防/智慧工厂/视频分析EasyCVR视频监控汇聚平台如何关闭国标设备的自动检索功能?
    安防监控视频融合汇聚平台EasyCVR兼容性强,可支持Windows系统、Linux系统以及国产化操作系统等,平台既具备传统安防视频监控的能力,也具备接入AI智能分析的能力,可拓展性强、视频能力灵活,能对外分发RTMP、RTSP、HTTP-FLV、WebSocket-FLV、HLS、WebRTC、ws-fmp4、http-fmp4等视频流。......