大话设计模式之四:1~5章(简单工厂模式 、策略模式、单一职责原则、开放封闭原则 、依赖倒转原则)

注:《大话设计模式》这本书很好的介绍了设计模式,其对应的源码是C#语言写得,跑在visual studio上,所以自己先安装visual studio ,然后将源码跑一跑,这样能深刻的理解《大话设计模式这本书》,现在将整个过程整理好,方便别人也方便自己!


第一章:代码无错就是优?--简单工厂模式 

…………………………………………………………………………………………………………………………………………
工厂模式:是指简单工厂还是抽象工厂?
 
三层:数据访问层(访问数据库,提取数据),业务层(处理义务逻辑),表示层(展现数据)。
 
简单工厂模式:工厂创建(相当于father 类)不同的子类产品,然后作为父类产品返回给客户
 
  例如 father  f=new son
用三层可以实现简单工厂模式。
…………………………………………………………………………………………………………………………………………
简单工厂模式:就是类似活字印刷术,将逻辑层、用户层、数据层分开;

优点:便于维护、能较好的应付需求的改变、低耦合;
缺点:代码量增加,不能用于速度要求高的项目,比如股票市场信息的分析等;

所使用的项目是:计算器

功能:能实现一般计算器的计算功能;

界面:计算器的界面;

设计思路:计算器设计将运算逻辑和界面分开,这样设计的好处是在增加运算器功能时,只需要增加运算子类和switch和界面就好。

收获:简单工厂模式提高了维护性,便于减少后期的维护工作量。

第二章商场促销—策略模式

策略模式:
  • 定义一个算法族,封装每一个,并使它们可以互换。策略让算法独立于使用它的客户。
  • 捕捉到一个接口中的抽象,在派生类中隐藏实现细节。

优点:类的等级结构定义了一个算法或行为族。恰当使用继承可以把公共的代码转移到父类里面,从而避免重复的代码;
简化了单元检测,可以直接用对应的借口直接检测。

缺点:1.客户端必须知道所有的策略类,并自行决定使用哪一个策略类。

      2.造成很多的策略类。


所使用的项目是:商场收银软件

功能:能计算出不同打折优惠的收银情况;

界面:将不同打折优惠的情况都做成下拉选择框的选项;

设计思路:各种打折优惠情况本质上都是算法,其实可以抽象为一个父类。
 大话设计模式之四:1~5章(简单工厂模式 、策略模式、单一职责原则、开放封闭原则 、依赖倒转原则)大话设计模式之四:1~5章(简单工厂模式 、策略模式、单一职责原则、开放封闭原则 、依赖倒转原则)

收获:(1)、面向对象的编程,并不是越多越好,类的划分是为了封装,但分类的基础是抽象,具有相同的属性和功能的对象的抽象的集合才是类。
(2)、针对借口编程,不针对编程实现;
(3)、实际中策略模式几乎可以封装任何类型的规则

第三章:拍摄UFO—单一职责原则 

单一职责原则 就一个类而言,仅有一个引起它变化的原因。


优点:单一职责原则还有利于对象的稳定,单一职责原则并不是极端地要求我们只能为对象定义一个职责,而是利用极端的表述方式重点强调,在定义对象职责时,必须考虑职责与对象之间的所属关系。
缺点:

所使用的项目是:俄罗斯方块

功能:游戏

界面:

设计思路:每一个方块区域标识为0,若占用就标示为1,这样就能判断方块该不该停,用数组标记,所谓的游戏逻辑便是数组的每一项数值的变化。游戏两边的墙用数组限制。

收获:类似手机,能拍照,但是不如相机,当类聚集的职责过多时,具体的功能就难以达到要求。
 

第四章:考研求职两不误——开放封闭原则
开放封闭原则 :对于扩展是开放的,对于更改时封闭的, 类似一国两制,类似电脑加内存。
优点:
缺点:

所使用的项目是:无

功能:

界面:

设计思路:

收获:拒绝不成熟的抽象和抽象一样重要。

第五章:会修电脑不会修收音机——依赖倒转原则
依赖倒转原则抽象不应该依赖细节,细节应该依赖于抽象,要针对接口编程,不应该针对实现编程。(如过依赖实现编程,电脑内存就要具体到某个品牌的主板,那么换电脑内存就需要换主板,这就尴尬了)。高层模块不应该依赖底层模块,两个都应该依赖抽象。

里氏代换原则:

 里氏替换原则通俗的来讲就是:子类可以扩展父类的功能,但不能改变父类原有的功能。它包含以下4层含义:

  • 子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。
  • 子类中可以增加自己特有的方法。
  • 当子类的方法重载父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松。
  • 当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格。

        看上去很不可思议,因为我们会发现在自己编程中常常会违反里氏替换原则,程序照样跑的好好的。所以大家都会产生这样的疑问,假如我非要不遵循里氏替换原则会有什么后果?

        后果就是:你写的代码出问题的几率将会大大增加。


子类型必须能替换掉他们的父亲类。


优点:
缺点:

所使用的项目是:无

功能:

界面:

设计思路:

收获:面向对象的四个好处:(类似活字印刷术)可维护、可拓展、可复用、灵活性好;
如今修电脑,修飞机都是换模块,这就是编程里的强内聚、低耦合。封装好后,留下接口就好了。
电脑各模块就符合单一职责原则,内存不够加内存就好了,这是开放封闭原则。
 
依赖倒转原则可以说是面向对象设计的标志,编程面向抽象编程而不是面向细节编程,即所有的编程终止于抽象类或接口,这便是面向对象编程。