大话设计模式一之简单工厂模式

转载 2018年04月16日 17:55:31
我们在看到了精彩的球赛,欣赏球星高超球技的同时,却忽略了球星的成长过程。他们尽管有一定天分,
但却也是从最底层通过努力一点一点慢慢显露出来的。
我们需要的不仅仅是世界杯上的那定乾坤的一脚,更需要这一脚之前是如何练出那种神奇的方法。




对于程序员来讲,精彩的代码是如何想出来的,要比看到精彩的代码更加令人期待。






如果想成为一名更优秀的软件设计师,了解优秀软件设计的演变过程比学习优秀设计本身更有价值,
因为设计的演变过程中蕴藏着大智慧。




通过这些设计模式找到“封装变化”、“对象间松散耦合”、“针对接口编程”的感觉,
从而设计出易维护、易扩展、易复用、灵活性好的程序。












第一章 代码无错就是忧?--简单工厂模式
一、初学者代码的毛病
写计算器功能
1、命名不规范
2、判断分支时,是否每个条件都需要做判断
3、如果除数是0怎么办,如果用户输入的是字符符号而不是数字怎么办


二、活字印刷术的好处
1、要改,只需更改要改之字,此为可维护
2、这些字并非用完这次就无用,完全可以在后来的印刷中重复使用,此乃可复用
3、此诗若要加字,只需另刻字加入即可,这是可扩展
4、字的排列其实可能是竖排可能是横排,此时只需将活字移动就可做到满足排列需求,此是灵活性




三、面向对象
通过封装、继承、多态把程序的耦合度降低
用设计模式使得程序更加的灵活,容易修改,并且易于复用


哪些是和控制台无关的,而只是和计算器有关的?将计算和显示分开


有人说初级程序员的工作就是Ctrl+C和Ctrl+V,这其实是非常不好的习惯,
因为当你的代码中重复的代码多到一定程度,维护的时候,可能就是一场灾难。
越大的系统,这种方式带来的问题越严重,编程有一原则,就是用尽可能的办法去避免重复。


哪些是和控制台无关的,而只是和计算器有关的?将计算和显示分开。
准确地说,就是让业务逻辑与界面逻辑分开,让它们之间的耦合度下降。
只有分离开,才可以达到容易维护或扩展。








总结:封装可以实现业务逻辑与界面逻辑相分离。
      继承可以实现修改或者增加一个算法而不需要修改任何一个其它的算法
      简单工厂模式可以解决到底要实例化谁、实例化哪个对象的问题



四、简单工厂模式

简单工厂模式,也就是说,到底要实例化谁,将来会不会增加实例化的对象,比如增加开根运算,这是很容易变化的地方,应该考虑用一个单独的类来做这个创造实例的过程,这就是工厂




五、UML类图






矩形框“动物”,它就代表一个类(Class)。类图分三层,第一层显示类的名称,如果是抽象类,
则就用斜体显示。第二层是类的特性,通常就是字段和属性。第三层是类的操作,通常是方法或行为。
注意前面的符号,'+'表示public,'-'表示private,‘#’表示protected






‘飞翔’表示一个接口图,与类图的区别主要是顶端有《interface》显示。第一行是接口名称,
第二行是接口方法。接口还有另一种表示方法,俗称棒棒糖表示法。鸭子本来也有语言,
只不过只有唐老鸭是能讲人话的鸭子。






动物、鸟、鸭、唐老鸭之间是继承关系,继承关系用空心三角形+实线来表示






大雁是最能飞的,它实现了飞翔接口。实现接口用空心三角+虚线来表示






企鹅和气候两个类,企鹅是很特别的鸟,会游不会飞。更重要的是,它与气候有很大的关联。
企鹅需要‘知道’气候的变化,需要‘了解’气候规律。当一个类‘知道’另一个类时,
可以用关联(association)。关联关系用实线箭头来表示。






大雁与雁群这两个类,大雁是群居动物,每只大雁都是属于一个雁群,一个雁群可以有多只大雁。
所以它们之间就满足聚合(Aggregation)关系。聚合表示一种弱的‘拥有’关系,体现的是A对象可以包含B对象,
但B对象不是A对象的一部分(DPE).聚合关系用空心的菱形+实线箭头来表示。




合成(Composition,也有翻译成‘组合’的)是一种强‘拥有’关系,体现了严格的部分和整体的关系,
部分和整体的生命周期一样。合成关系用实心的菱形+实线箭头来表示。
合成关系的连线两端还有一个数字‘1’和‘2’,这被称为基数。表明这一端的类可以有几个实例,
很显然,一个鸟应该有两只翅膀。如果一个类可能有无数个实例,则就用‘n’来表示。
关联关系、聚合关系也可以有基数的。




动物几大特征,比如有新陈代谢,能繁殖。而动物要有生命力,需要氧气税以及食物等。也就是说,动物依赖于氧气和水。
他们之间是依赖关系(Dependency),用虚线箭头来表示。






写出优雅的代码真的是一种很爽的事情。
编程是一门技术,更是一门艺术





大话设计模式—工厂模式

一、简介工厂模式主要是为创建对象提供了接口。工厂模式按照《Java与模式》中的提法分为三类: 简单工厂模式(Simple Factory) 工厂方法模式(Factory Method) 抽象工厂模...
  • lmb55
  • lmb55
  • 2015-05-31 14:42:07
  • 1286

大话设计模式之一简单工厂模式

这是我所敲的第一个设计模式,一个严格来说不能算作设计模式的模式,一个让我这个菜鸟头疼了两天的模式~对于刚才VB6.0转战过来的、从前认为代码简单即是优的我来说,理解这个过程真的很痛苦呢~     在...
  • wlccomeon
  • wlccomeon
  • 2013-02-19 16:57:34
  • 2035

大话设计模式之简单工厂模式、抽象工厂模式及工厂方法模式的比较

简单工厂模式、抽象工厂模式、工厂方法模式,这三种工厂模式都属于设计模式中的创建型模式,它们在形式和特点上也多少有些相似,其最终目的都是帮我们将对象的实例化部分取出来,进而优化系统架构,增强系统的扩展性...
  • HH1778981113
  • HH1778981113
  • 2016-10-29 23:24:19
  • 104

大话设计模式C++实现-第1章-简单工厂模式

一、UML图 二、包含的角色 简单工厂模式包含三个角色:(1)工厂类Factory(2)抽象产品类AbstractProduct(3)具体产品类ConcreteProduct。 (1)Factor...
  • XD_lixin
  • XD_lixin
  • 2014-11-09 15:09:13
  • 2980

大话设计模式1 简单工厂模式 的java代码实现

首先是Operation抽象类: package yx.designpattern.simpleFactory; abstract class Operation { public double...
  • yixiang1989
  • yixiang1989
  • 2014-08-08 19:39:50
  • 599

01 简单工厂模式 设计模式

  • 2010年12月07日 21:47
  • 141KB
  • 下载

【设计模式】简单工厂模式——以一个简单的计算器为例

本文内容参考自《大话设计模式》(程杰 著) 1.拙劣的代码class Program{ static void Main(string[] args) { Console.W...
  • jiange_zh
  • jiange_zh
  • 2015-12-04 13:51:04
  • 3401

大话设计模式—简单工厂

  • 2008年08月25日 15:19
  • 4KB
  • 下载

设计模式-简单工厂设计模式与策略模式之java实现

介绍一下简单工厂模式与策略模式
  • u013871100
  • u013871100
  • 2016-12-16 22:30:31
  • 390

golang设计模式之简单工厂模式

1. 写在前面在面向对象的编程语言中(如java,C++)设计模式的概念广为人知, 应用的也非常广泛。设计模式让我们的代码变得灵活起来,具有很强的扩展性。但在与C语言比肩的Go语言中,设计模式的概念并...
  • Jeanphorn
  • Jeanphorn
  • 2017-08-31 23:15:55
  • 2263
收藏助手
不良信息举报
您举报文章:大话设计模式一之简单工厂模式
举报原因:
原因补充:

(最多只允许输入30个字)