看完了,就全忘了,不总结就等于没看!所以大概的总结了。

大话设计模式

大话设计模式中将近三十种模式,是将我们原来的代码框架思路转变成另一种思路。代码和生活是一样的,当我们发现重复的去做一件事情的时候就会思考是否会有捷径有效率的完成,而在程序中当大量重复的代码出现时,我们就自然想到类、抽象、接口,而又是如何让每一类独立性更强,如何达到最佳的分类效果,这就要靠我们在学习中发现和探索。而设计模式是我们思路的指导,让我们对面向对象编程更加深刻的认识。而最终的目的是我们设计出易维护、易扩展、易复用、灵活性好的程序。

简单工厂模式---计算器

在该模式中就是把我们平时写计算器的代码进行模块化,是从宏观上设计,将原来我们只值注重在主函数中写代码转到把大体相同的事物抽象为类。抽象出运算类抽象类,并且加法类、减法类、乘法类、除法类继承该抽象类。为了避免更多的重复操作,考虑用一个单独的类来做这个创造实例的过程,从而增加了运算工厂类,从而使客户端代码进一步简洁。

策略模式---商场收银

在这个模式告诉我们代码不但要实现单一的功能,而是要想到这个程序的复用,和扩展性,代码是否复杂和重复的太多,软件的健壮性和效率问题。

一个简单的根据单价和数量来计算总的钱数。在这里提出的是是增加打折之后怎样去实现。

用我们开始所学的简单工厂模式,是把打折方式分为类,并且继承策略这个超类。而在具体的策略类中为了传入具体的策略对象另一方面是为了调用策略中的方法。这样只让客户端识别了一个cashContext类,而用简单工厂要识别CashSuper和CashFactory两个类。

策略模式是一种定义一下列算法,从概念上来看,所有这些算法都是相同的工作,只是实现不同,它可以用相同的方式来调用所有的算法,减少了各种算法类与使用算法类之间的耦合。

单一职责原则---手机拍摄UFO

小菜要拍摄UFO,从而想到摄像机和我们平时使用的手机上带的摄像头的不同。单一职责原则:一个类,应该仅有一个引起它变化的原因。软件设计真正要做的很多,就是发现职责,并把这些职责相互分离。

开放封闭原则---考研和工作

从小菜考研和工作要做到同时准备来说,提出了开放封闭式原则,就是说软件实体(类、模块、函数)等应该可以扩展,但是不可以修改。对于扩展是开放的,对于更改是封闭的。要多扩展少修改,就像开始所学的简单工厂模式一样,在原来的代码基础上是通过增加代码(类)来进行的,而不是通过改现有的代码。

依赖倒转原则---修电脑和收音机

在修计算机主机的时候发现各个插槽接口是独立的接口,并且对与有的插槽可以扩展,例如内存不够可以扩展,硬盘不够可以使用可移动硬盘,所以总结出抽线不应该依赖于细节,细节应该依赖于抽象,要针对接口编程,不要针对实现编程。

里氏代换原则---依赖了接口和抽象类就不怕了

子类型必须能够替换其父类型。只有当子类可以替换掉父类,软件单位的更能不受影响,父类才能真正的被复用,而子类也能够在父类的基础上增加新的行为。

装饰模式---衣服种类和要打扮的人分离

可以动态的实现“穿衣服”,为已有的功能动态的添加更多的功能。

代理模式---戴励代卓贾易追娇娇

把送礼物抽象出接口,让代理和实际的追求者来实现接口中的方法,而代理和追求者之间是相互依赖的关系。

工厂方法模式---雷锋工厂

工厂方法模式是简单工厂模式的抽象和扩展。工厂方法模式是由客户端来决定实例化哪一个工厂实现运算类。在简单工厂类中要增加功能是是改动的是工厂类,而在工厂方法模式要改的就是客户端了,从客户端中实例化工厂类来进行调用。

原型模式---简历复印(浅复制)

原型模型是从一个对象再创建另一个可定制的对象,而且不需要知道任何的创建细节。。Net在System命名空间中提供了ICIoneable接口,继承这个接口来实现的复制,这个接口中的方法Clone()。

模版方法模式---把试题和答案分离

模版方法通常是把不变的行为搬移到超类中,去除子类中的重复代码来体现优势。

迪米特法则---办事找部门(找低层次的模块)

如果两个类不必彼此直接通信,那么这两个类就不应当发生直接相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发。

外观模式---对基金的操作和股票的类型分离

增加外观类来减少接口,使客户端简单。

建造者模式---建造小人

把构造小人和表示小人分开。

观察者模式---老板和秘书通知员工

定一个了通知者和被通知者接口,具体的通知者和被通知者来分别实现这个接口,在抽象的通知者接口中定义抽象的方法这样以便可以动态的添加和删除被通知者。当一个对象的改变需要同事改变其他对象的时候应该考虑到使用观察者模式。

抽象工厂模式---数据库的更换

与工厂模式不同的是,的业务逻辑层只有一个类,而抽象工厂模式又添加了IDepartment的抽象接口和类。简单工厂模式、工厂模式和抽象工厂模式,三个模式比较来就好理解了。

状态模式---把不同的工作状态分离出来

当一个对象的内在状态改变时,允许改变其行为,这个对象看起来像是改变了其类。感觉状态模式和前面的策略模式有异曲同工之妙。在这里面用的是把Context类作为了状态类state的抽象方法来使用的,并在具体的状态类中把下一状态赋值了。

状态模式的好处是将与特定状态相关的行为局部化,并且将不同的行为分割开来。

适配器模式---在NBA需要翻译

适配器模式,将一个类的接口转换成为客户希望的另外的一个接口。就是在翻译者类中实例化姚明,并在方法中进行“翻译”。

备忘录模式---游戏进度

在不破坏封装型的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以对这个状态进行恢复了。也就是在备忘类中传递一个发起人类的state字符串。

组合模式---分公司和部门

将对象组合成树形结构来表示“整体和部分”的关系。声明一个抽象的Componet类管理子部件和叶子部件,该抽象类中定义增加、移除和显示的抽象方法,叶子类和枝干类分别继承该抽象类。

迭代器模式---售票员遍历车上所有的人

定义了一个迭代器抽象类、要迭代的抽象类、具体的迭代器、具体的要迭代的类。在具体的迭代器类中声明要迭代的类,在具体的聚集类中实例化一个具体的要迭代的类,并将当前的聚集类传递到具体的迭代器的类中,在迭代器的类中作为构造函数进行初始化。

单例模式---类的计划生育

是通过的改变类的构造方法来实习的,因为对于类的构造方法,如果不声明类的构造方法,系统则默认无参的构造方法,如果显示的定义了,默认的构造方法就失效了。

单例模式是保证一个类仅有一个实例,并且提供一个访问它的全局访问点,把默认的构造方法设置为私有的,通过定义该类中的一个方法来进行实例化,再在客户端判断是否重复实例化。

桥接模式---不同手机对软件的兼容问题

合成聚合原则:是尽量使用合成/聚合,尽量不要使用类的继承。桥接模式就将抽象部分和它的实现分离,使他们都可以独立的变化。定义手机品牌和手机软件两个抽象类且他们之间是聚合的关系,具体手机品牌类和具体的游戏类再去继承他们。

命令模式---烤肉请求烤肉师傅实现

抽象命令类,在该类中实例化一个具体的烤肉者和一个抽象的命令。具体的命令类在继承该类的时候复写父类中的方法,从而实现了服务员通知烤肉者,而在Waiter类中声明一个私有命令类,和两个方法。当考虑到在点菜的过程中有的客户会取消或是更换菜品,所以近一步更改了Waiter类,并在该类中定一个了command数组,通过数组的add方法和Remove来进行对增加和减少订单。

职责链模式---权限问题解决

将对象连接成一个链,判断权限,直到有能处理的对象处理它。就是在定一个每个具体的处理类的时候首先是判断这个请求的权限,如果有权限则执行,如果没有权限则转到下一个高级别的。

中介者模式---联合国安理会要知道所有的国家

主要是依赖联合国安理会这个类,通过这个类来实现国家之间的通信,而不是各国之间直接通信,虽然实现了各个国家的独立,但是增加了安理会这个中介类的负担。

享元模式---通过判断来分享

通过网站工厂类来判断网站类的对象是否被实例化了,实例化则直接返回,没有实例化则实例化再返回。

解释器模式---解释

解释器固定,Context来传入,传入后判断。

访问者模式---状态和人类分开

把男人和女人成功和失败的状态分开,并且增加了对象结构类,来增加具体的男人类和女人类。性别稳定,状态稳定,人的个数可以增加,在状态中传递一个具体的人类来显示状态。

其实各个模式的本质是一致的,且模式就像算法?还是说是图纸上的框架呢?模式也不是绝对的,不同的需求适合不同的模式,找个平衡就好吧,还在在具体的盖房子过程中才会体会到吧。

作者:xhf55555 发表于2011-12-11 11:03:58 原文链接
阅读:3780 评论:17 查看评论

转载于:https://www.cnblogs.com/loveyong/archive/2011/12/11/2330152.html

[原]编程融入生活---设计模式总结相关推荐

  1. 专访《Javascript设计模式与开发实践》作者曾探:爱编程 爱生活

     专访<Javascript设计模式与开发实践>作者曾探:爱编程 爱生活 发表于12小时前| 2742次阅读| 来源CSDN| 8 条评论| 作者夏梦竹 专访曾探图书作者Javascr ...

  2. 福布斯评科技未来五大趋势:电脑消失融入生活时间

    福布斯评科技未来五大趋势:电脑消失融入生活时间     谈趋势似乎并不讨巧,因为所谓趋势通常都是指时尚.每每谈及趋势,人们立刻就会想到穿着夸张服饰在T台上昂首阔步的模特,但每当下一季的新款推出,再华丽 ...

  3. Java多线程编程实战指南+设计模式篇pdf

    下载地址:网盘下载 随着CPU 多核时代的到来,多线程编程在充分利用计算资源.提高软件服务质量方面扮演了越来越重要的角色.而 解决多线程编程中频繁出现的普遍问题可以借鉴设计模式所提供的现成解决方案.然 ...

  4. java多线程编程_Java多线程编程实战指南+设计模式篇.pdf

    Java多线程编程实战指南+设计模式篇.pdf 对Java架构技术感兴趣的工程师朋友们可以关注我,转发此文后私信我"Java"获取更多Java编程PDF资料(附送视频精讲) 关注我 ...

  5. 多线程编程和单线程编程_生活与编程的平行线程

    多线程编程和单线程编程 I'm convinced our deepest desire is, by paying the cost of time, to be shown a glimmer o ...

  6. 用 Kotlin 的函数式编程 替代 GOF 设计模式

    用 Kotlin 的函数式编程 替代 GOF 设计模式 函数式编程(FP) <Kotlin极简教程>正式上架: 点击这里 > 去京东商城购买阅读 点击这里 > 去天猫商城购买阅 ...

  7. 游戏编程之常用设计模式

    游戏编程之常用设计模式 作者:老九-技术大黍 社交:知乎 公众号:老九学堂(新人有惊喜) 特别声明:原创不易,未经授权不得转载或抄袭,如需转载可联系笔者授权 前言 一说到设计模式,可能大家会想到Jav ...

  8. 用笔记本改装智能家居服务器,让智能家居真正融入生活

    让智能家居真正融入生活 有些智能家居产品至今无法获得成功的一个重要原因是,它们是给喜爱科技的人打造的,而并非普通的老百姓,所以智能家居融入普通百姓家的过程将会是一个漫长的过程.另外,由于这些人是早期的 ...

  9. python的编程模式-Python设计模式:为了整洁又时尚的代码

    关键时刻,第一时间送达! 作者ANDREI BOYANOV - 高级软件工程师 @TOPTAL 让我们再重申一下:Python是一种具有动态类型和动态绑定的高级编程语言.我将它描述为一个强大的高级动态 ...

最新文章

  1. java如何保证redis设置过期时间的原子性_2020年4月Redis面试题和答案整理
  2. C# VS预生成事件命令行 和 生成后事件命令行
  3. 我去德国出差后学习的一些德语
  4. springboot2.2.9源码搭建
  5. 苹果iPad mini 6更多细节曝光:全面屏加持 搭载A14/A15芯片
  6. Tokenizers: How machines read
  7. java中的传参是什么意思_如果作为参数传递,“字符串…参数”是什么意思?...
  8. Asp.net.Ajax控件学习
  9. SQL数据库安装-数据库的下载
  10. IT,大一,这里我有点建议
  11. weblogic错误页面
  12. Linux下VirtualBox出现kernel driver not installed的解决方法
  13. 顺序工作流 状态机工作流 数据岛工作流 选择 .
  14. 三个步骤教你-----如何实现DHCP中继配置
  15. 计算机网络 中 网络层
  16. 杰理AC632蓝牙芯片ADC
  17. 有人想让汽车无人化,但有人想让汽车飞起来
  18. 大学计算机应用教程马秀麟,马秀麟
  19. 计算机未来职业倾向,计算机专业职业生涯规划书50390.docx
  20. Drools规则属性,高级语法

热门文章

  1. XmlReader and XmlWriter in .NET
  2. 连接池技术 Connection Pooling
  3. jstack可以定位到线程堆栈
  4. JQuery事件绑定,bind与on区别
  5. 服务端发post请求产生的编码问题
  6. VB.Net to C Sharp Converter有用吗?
  7. ExecutorService(任务调度器)详解
  8. 深入Java泛型(四):RxJava中泛型的使用分析
  9. Android native 开发总结
  10. : Android之linux基础教学之三 分页机制