作为一个刚刚入门的菜鸟。虽只学到了些许编程语言的皮毛(或者连皮毛都算不上),但是随着时间和学习的深入,"设计模式"这一专业术语便慢慢浮现在眼前。

到底何为设计模式呢?它的出现将会给我们带来哪些帮助?......等等一系列问题便会出现在我们脑海中。俗话说:问题才是探究知识的钥匙。就让我们带着

自己的疑问一同来学习设计模式。

首先,我们先来认识一下什么是设计模式,以及运用设计模式的优点。

设计模式的简单理解:模式是在某一背景下某个问题的一种解决方案。
1、复用解决方案——通过复用已经公认的设计,我能够在解决问题时取得先发优势,而且避免重蹈前人覆辙。我可以从学习他人的经验中获益,用不着为那些总是会重复出现的问题再次设计解决方案了。
2、确立通用术语——开发中的交流和协作都需要共同的词汇基础和对问题的共识。设计模式在项目的分析和设计阶段提供了共同的基准点。
3、提高观察高度--模式还为我们提供了观察问题、设计过程和面向对象的更高层次的视角,这将使我们从“过早处理细节”的桎梏中解放出来。
4、大多数设计模式还能使软件更容易修改和维护。其原因在于,它们都是久经考验的解决方案。所以,它们的结构都是经过长期发展形成的,比新构思的解决方案更善于应对变化。而且,这些模式所用代码往往更易于理解——从而使代码更易维护。

在这里,设计模式可以看做是对解决某种问题所采取相对应的解决方案的统称。

设计模式一共包含了23种,其中有五种是经常在开发中用到的,相信大家已早有耳闻,我也不在此多啰嗦,下面就进入正题:设计模式之——简单工厂。

我们将通过一个简单的例子来对简单工厂进行学习。

多态计算器

输入两数,选取任意算法计算两数的结果。

我们先用多态的方式解决:

1.类的创建

2.关键代码

 1 Operation operation = new Operation();
 2                 switch (cmbCountWay.SelectedItem.ToString().Trim())
 3                 {
 4                     case "+":
 5                         operation = new OperationAdd();
 6                         break;
 7                     case "-":
 8                         operation = new OperationSubtraction();
 9                         break;
10                     case "*":
11                         operation = new OperationMultiplication();
12                         break;
13                     case "/":
14                         operation = new OperationDivision();
15                         break;
16                     default:
17                         break;
18                 }
19                 //进行计算
20                 operation.FirstNum = double.Parse(txtFirstNum.Text.Trim());
21                 operation.SecondNum = double.Parse(txtSecondNum.Text.Trim());
22                 double result = operation.GetCount();
23                 this.txtResult.Text = result.ToString();

View Code

通过代码我们会发现:

我们在编程的时候,每当"new"一个对象之后,这个对象就依赖于这个类了。如果在后期的维护过程中由于某些原因需要修改一下这个类,则唯一的做法就是打开源代码,进行修改,修改所有与这个对象有关的操作。这对我们是非常不利的。
问题出来了:对象不能应对“具体实例化类型”的变化
解决思路:封装变化点,哪里变化,封装哪里。在这个例子中,要实例化的类变了,就将实例化这个操作封装起来,我们可以把"new"这个操作移交一个具体的类,由它去负责根据我们的条件创建具体类的实例,也就是下面要说的“简单工厂模式”。

只需添加一个工厂类,通过传来的计算符号制造计算方法。

 public class OperatorFactory{public static Operator CreatOperator(string oper){Operator calc = null;switch (oper){case"+":calc = new Add();break;case"-":calc = new Sum();break;case"*":calc = new Mul();break;case"/":calc = new Div();break;}return calc;}}

OperatorFactory

 private void btnCount_Click(object sender, EventArgs e){int numLeft = Convert.ToInt32(txtNumLeft.Text);int numRight = Convert.ToInt32(txtNumRight.Text);string oper = cmbOperator.SelectedItem.ToString();Operator calc = OperatorFactory.CreatOperator(oper);try{calc.NumLeft = numLeft;calc.NumRight = numRight;txtResult.Text = calc.Operation().ToString();}catch (Exception ex){MessageBox.Show(ex.Message);}}

Main()

从上面的代码对比,我们不难看出:

(简单工厂)优点:

  • 简单工厂模式能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。通过它,外界可以从直接创建具体产品对  象的尴尬局面中摆脱出来。
  • 外界与具体类隔离开来,偶合性低。
  • 明确区分了各自的职责和权力,有利于整个软件体系结构的优化。

缺点:

  • 虽然简单工厂模式能够适应一定的变化,但是它所能解决的问题是远远有限的。它所能创建的类只能是事先教考虑到的,如果需要添加新的类,则就需要改变工厂类了。(如何进行更一步的优化改进还需要我继续学习)

应用情景

  • 工厂类负责创建的对象比较少
  • 客户只知道传入了工厂类的参数,对于始何创建对象(逻辑)不关心

兵法有三十六计...三十六计是对历代杰出军事家实战经验的总结,以利后人学习兵法...上者领悟其神不拘一格可成兵法家,中者融会贯通运用得当可成大将军,下者只知形式循规守据可拿来唬人...

武术有套路...套路是对各门派前辈高手实战经验的总结,将一连串攻防常用的招式串连起来以利后人纪录、操练...上者领悟其神不拘一格可成武术家,中者融会贯通运用得当可成一派高手,下者只知形式循规守据可拿来唬人...

设计模式则是对以前的编程高手开发经验的总结,以利后人学习...上者领悟其神不拘一格可成传说中的大牛,中者融会贯通运用得当可拿高薪,下者只知形式循规守据可拿来唬人...

只从书本上学、只听别人讨论却没有在实战中自己去领悟就只能做到拿来唬人...(所以建议多多运用,慢慢体味)

如果你学了在实战中还看不出有什么好处就没事儿拿出来唬人吧...

转载于:https://www.cnblogs.com/Serean/p/4644121.html

初识设计模式之--简单工厂相关推荐

  1. 初识设计模式之简单工厂模式、工厂方法模式、抽象工厂模式

    简单工厂模式 工厂方法模式 抽象工厂模式 ​ 工厂顾名思义就是生产产品的意思,根据产品是具体产品还是具体工厂可分为简单工厂模式和工厂方法模式,根据工厂的抽象程度可分为工厂方法模式和抽象工厂模式.该模式 ...

  2. php的类图怎么生成_PHP设计模式之简单工厂模式

    PHP设计模式之简单工厂模式 先从简单工厂入门,不管是面试还是被他人面试,在问到设计模式的时候,大多数人都会提到工厂模式.毫无疑问,工厂相关的几种模式在设计模式中是最出名的也是应用比较广泛的一种模式. ...

  3. C#设计模式(2)——简单工厂模式

    一.引言 这个系列也是自己对设计模式的一些学习笔记,希望对一些初学设计模式的人有所帮助的,在上一个专题中介绍了单例模式,在这个专题中继续为大家介绍一个比较容易理解的模式--简单工厂模式. 二.简单工厂 ...

  4. 工厂模式 java场景_研磨设计模式之简单工厂模式(场景问题)

    简单工厂不是一个标准的设计模式,但是它实在是太常用了,简单而又神奇,所以还是需要好好掌握的,就当是对学习设计模式的热身运动吧.为了保持一致性,我们尽量按照学习其它模式的步骤来进行学习. 1  场景问题 ...

  5. .NET设计模式(1): 简单工厂模式

    .NET设计模式(1): 简单工厂模式 最近一直在看设计模式,想把自己的学习笔记与大家分享一下,如果能帮助大家的话,我会非常高兴,同时也欢迎大家指出里面的不足.园子里其实关于此类文章已经很多了,如果d ...

  6. JS常用的设计模式(2)——简单工厂模式

    JS常用的设计模式(2)--简单工厂模式 简单工厂模式是由一个方法来决定到底要创建哪个类的实例, 而这些实例经常都拥有相同的接口. 这种模式主要用在所实例化的类型在编译期并不能确定, 而是在执行期决定 ...

  7. 设计模式之简单工厂模式(C#版)

    设计模式之简单工厂模式(C#版) 简介 假设有个女朋友 总结 简介 我用最简洁而直接的方式来描述一下,什么是简单工厂模式.一句话就是,工厂类使用switch case语句返回特定类型. 下面,我们用一 ...

  8. 大牧絮叨设计模式:简单工厂模式

    文章目录 1. 简单工厂模式概述 1.1.简单工厂模式核心组件 1.2.简单工厂模式优缺点 2.` Java`实现 公共父类定义 产品具体实现类 简单工厂定义 代码运行测试: 3. `Python`实 ...

  9. 设计模式之简单工厂模式(Java 实现)

    设计模式之简单工厂模式(Java 实现) 本文首发于http://www.imooc.com/wiki/Designlesson/factory.html 简单工厂模式是平时开发过程中最常见的设计模式 ...

  10. 工厂设计模式、简单工厂设计模式、抽象工厂设计模式

    一.简单工厂设计模式.工厂设计模式,抽象工厂设计模式总体分析 简单工厂模式 简单工厂模式不是23种里的一种,简而言之,就是有一个专门生产某个产品的类. 比如下图中的鼠标工厂,专业生产鼠标,给参数0,生 ...

最新文章

  1. LeetCode简单题之分发饼干
  2. SCALA当的trait
  3. JVM 史上最最最完整深入解析(12000 字噢)
  4. 3.实战HTML+CSS布局(实例入门篇)
  5. Epplus:导出Excel
  6. Silverlight 4常用StringFormat格式总结
  7. boost::filesystem模块实现Windows MAX_PATH的测试程序
  8. 信息学奥赛一本通 1086:角谷猜想 | OpenJudge NOI 1.5 21
  9. java suppresslint_@SuppressLint(NewApi)
  10. 随想录(学校作业和工程代码)
  11. jQuery实现影院选座订座效果
  12. 修改mysql表前缀_使用phpMyAdmin批量修改Mysql数据表前缀的方法
  13. poj 2479 Maximum sum(递推)
  14. php 的主要功能和特点,PHPMailer的主要功能特点和简单使用说明
  15. 点云配准(PCL+ICP)
  16. Markdown:插入图片和图注
  17. 国产AIoT SoC芯片
  18. 【BZOJ1061】【NOI2008】志愿者招募 费用流神题、单纯形裸题(代码费用流)
  19. 数据分析项目实战——Airbnb数据分析
  20. PS插件-人像处理美颜磨皮瑕疵修复套装Retouch4me

热门文章

  1. java paint方法_在Java中,为了使paint()方法执行,以下各项中,()是最佳的调用方法
  2. 4n35光耦引脚图_光耦合器隔离技术在工业环境中的应用!-先进光半导体
  3. activity直接销毁_Android 关于Activity的销毁和重建
  4. 苹果亮度自动调节怎么关闭_iPhone 总是自动亮屏,该怎么关闭?
  5. Linux JAVA JDK JRE 环境变量安装与配置
  6. servlet详解及Tomcat中多线程下的Servlet(1)
  7. Tomcat使用Tomcat Native和APR
  8. 中继联通chinaunicom热点。求路由推荐。-无线路由器-中国无线论坛 -
  9. 在线开启mysql慢查询
  10. CenterNet :Objects as Points/CenterTrack:Tracking Objects as Points