但却也是从最底层通过努力一点一点慢慢显露出来的。
我们需要的不仅仅是世界杯上的那定乾坤的一脚,更需要这一脚之前是如何练出那种神奇的方法。
对于程序员来讲,精彩的代码是如何想出来的,要比看到精彩的代码更加令人期待。
如果想成为一名更优秀的软件设计师,了解优秀软件设计的演变过程比学习优秀设计本身更有价值,
因为设计的演变过程中蕴藏着大智慧。
通过这些设计模式找到“封装变化”、“对象间松散耦合”、“针对接口编程”的感觉,
从而设计出易维护、易扩展、易复用、灵活性好的程序。
第一章 代码无错就是忧?--简单工厂模式
一、初学者代码的毛病
写计算器功能
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),用虚线箭头来表示。
写出优雅的代码真的是一种很爽的事情。
编程是一门技术,更是一门艺术