4、大话设计模式--简单工厂模式 、策略模式、单一职责原则、开放封闭原则 、依赖倒转原则

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

 

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

…………………………………………………………………………………………………………………………………………

工厂模式:是指简单工厂还是抽象工厂?

 

三层:数据访问层(访问数据库,提取数据),业务层(处理义务逻辑),表示层(展现数据)。

 

简单工厂模式:工厂创建(相当于father 类)不同的子类产品,然后作为父类产品返回给客户

 

  例如 father  f=new son

用三层可以实现简单工厂模式。

…………………………………………………………………………………………………………………………………………

简单工厂模式:就是类似活字印刷术,将逻辑层、用户层、数据层分开;

 

优点:便于维护、能较好的应付需求的改变、低耦合;

缺点:代码量增加,不能用于速度要求高的项目,比如股票市场信息的分析等;

 

所使用的项目是:计算器

 

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

 

界面:计算器的界面;

 

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

 

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

 

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

 

策略模式:

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

 

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

简化了单元检测,可以直接用对应的借口直接检测。

 

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

      2.造成很多的策略类。

 

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

 

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

 

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

 

设计思路:各种打折优惠情况本质上都是算法,其实可以抽象为一个父类。

 

 

收获:(1)、面向对象的编程,并不是越多越好,类的划分是为了封装,但分类的基础是抽象,具有相同的属性和功能的对象的抽象的集合才是类。

(2)、针对借口编程,不针对编程实现;

(3)、实际中策略模式几乎可以封装任何类型的规则

 

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

 

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

 

 

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

缺点:

 

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

 

功能:游戏

 

界面:

 

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

 

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

 

 

第四章:考研求职两不误——开放封闭原则

开放封闭原则 :对于扩展是开放的,对于更改时封闭的, 类似一国两制,类似电脑加内存。

优点:

缺点:

 

所使用的项目是:无

 

功能:

 

界面:

 

设计思路:

 

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

 

第五章:会修电脑不会修收音机——依赖倒转原则

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

 

里氏代换原则:

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

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

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

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

 

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

 

 

优点:

缺点:

 

所使用的项目是:无

 

功能:

 

界面:

 

设计思路:

 

收获:面向对象的四个好处:(类似活字印刷术)可维护、可拓展、可复用、灵活性好;

如今修电脑,修飞机都是换模块,这就是编程里的强内聚、低耦合。封装好后,留下接口就好了。

电脑各模块就符合单一职责原则,内存不够加内存就好了,这是开放封闭原则。

 

依赖倒转原则可以说是面向对象设计的标志,编程面向抽象编程而不是面向细节编程,即所有的编程终止于抽象类或接口,这便是面向对象编程。

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

worthsen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值