当前位置: 首页 > news >正文

策略模式和工厂模式的区别

转载至http://www.cnblogs.com/me115/p/3790615.html

工厂模式和策略模式看着很像,经常让人混淆不清; 
它们的区别在哪里,需要细细体味;

 

相似点

 

在模式结构上,两者很相似;

 

差异

 

  • 用途不一样 
    工厂是创建型模式,它的作用就是创建对象; 
    策略是行为型模式,它的作用是让一个对象在许多行为中选择一种行为;

 

  • 关注点不一样 
    一个关注对象创建 
    一个关注行为的封装

  • 解决不同的问题 
    工厂模式是创建型的设计模式,它接受指令,创建出符合要求的实例;它主要解决的是资源的统一分发,将对象的创建完全独立出来,让对象的创建和具体的使用客户无关。主要应用在多数据库选择,类库文件加载等。 
    策略模式是为了解决的是策略的切换与扩展,更简洁的说是定义策略族,分别封装起来,让他们之间可以相互替换,策略模式让策略的变化独立于使用策略的客户。

  • 工厂相当于黑盒子,策略相当于白盒子;

 

举例说明

 

    • 工厂模式 
      有一天你决定去吃培根披萨,首先得选择店铺,A店和B店都有培根披萨; 
      你点了A店的培根披萨,过了二十分钟,你的披萨就来了就可以吃到了。但这个披萨是怎么做的,到底面粉放了多少,培根放了多少,佐料放了多少,有多少道工序,你是不需要管的,你需要的是一个美味培根披萨。

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

 

转载于:https://www.cnblogs.com/JsonZhangAA/p/5467751.html

相关文章:

  • Regsvr32.exe 用法
  • 【转】js 获取浏览器高度和宽度值(多浏览器)
  • XML注释导致VS2005崩溃
  • Bugtags,最适合移动应用的智能 Bug 管理系统
  • Java开发
  • Git技巧:右键菜单怎么去除?
  • RTMFP vs RTMP
  • Linux Distribution / ROM
  • android Git命令家底儿及Git数据通信原理详解
  • directsound抓取麦克风PCM数据封装类
  • spring 下载地址
  • ArrayList底层实现
  • shell脚本替换文件中字符
  • MVC Html.AntiForgeryToken() 防止CSRF攻击
  • Codeforces Round #352 (Div. 2)
  • ----------
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 07.Android之多媒体问题
  • ECMAScript入门(七)--Module语法
  • Idea+maven+scala构建包并在spark on yarn 运行
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • JavaScript 一些 DOM 的知识点
  • PV统计优化设计
  • Redis 中的布隆过滤器
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • supervisor 永不挂掉的进程 安装以及使用
  • Vue小说阅读器(仿追书神器)
  • webgl (原生)基础入门指南【一】
  • 和 || 运算
  • 目录与文件属性:编写ls
  • 深度学习入门:10门免费线上课程推荐
  • 使用common-codec进行md5加密
  • 一个SAP顾问在美国的这些年
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • 追踪解析 FutureTask 源码
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • 交换综合实验一
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • #define,static,const,三种常量的区别
  • #微信小程序(布局、渲染层基础知识)
  • (02)Hive SQL编译成MapReduce任务的过程
  • (4)事件处理——(7)简单事件(Simple events)
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (二)windows配置JDK环境
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (力扣)循环队列的实现与详解(C语言)
  • (一)基于IDEA的JAVA基础1
  • .gitignore文件—git忽略文件
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析