
趣说设计模式
文章平均质量分 97
深入浅出面向对象设计原则,趣谈20多种设计模式(多图 + 代码样式),深入浅出的总结设计模式努力做到浅显易懂。设计模式是优秀程序员必备技能之一,否则只是初级的码农。最近再次梳理和总结设计模式专栏的文章,不用细读《设计模式》就能弄清楚。
hguisu
这个作者很懒,什么都没留下…
展开
-
《设计模式》总结和在spring框架的实践
1、感悟设计模式一到二十都是Gof《设计模式》内容的总结,Gof《设计模式》提到的代码都是c++。举例也不是特别典型。这些内容很早之前都已经总结了,现在重新把word笔记整理,算是温故而知新吧。一些地方描述可能有误,在往后的更多实践经验来进一步的修改。 目前我在开发项目的框架里面,使用的模式有给外观模式,代理模式,适配器等模式,这些不是为了模式而去模式,用这些模式去组织代码......原创 2012-05-14 16:56:51 · 7932 阅读 · 2 评论 -
优秀代码---改善代码三部曲:重构、设计模式、重构与模式
一、改善代码的三部曲 《设计模式》-> 《重构》-> 《重构与模式》。也就是设计->重构->重构出新设计。 《设计模式》主要详细说明20几种模式,为我们带来了常见设计问题的经典解决方案,从而改变了整个面向对象开发的面貌。为设计而著。 《重构》改善既有代码的设计,总结了我们会用到的各种重构手法,为我们带来了一种改进代码的高效过程,从而彻底改变了面向对象设计原创 2012-06-13 10:54:07 · 18802 阅读 · 6 评论 -
UML图中类之间的关系:依赖,关联,聚合,组合,泛化,实现
类与类图 1) 类(Class)封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性、操作、关系的对象集合的总称。2) 在系统中,每个类具有一定的职责,职责指的是类所担任的任务,即类要完成什么样的功能,要承担什么样的义务。一个类可以有多种职责,设计得好的类一般只有一种职责,在定义类的时候,将类的职责分解成为类的属性和操作(即方法)。3) 类的属性即类的数据职责,类的操作即类的行......原创 2012-06-07 18:34:44 · 90551 阅读 · 43 评论 -
设计原则:面向对象设计原则详解
我们在应用程序开发中,一般要求尽量两做到可维护性和可复用性。 应用程序的复用可以提高应用程序的开发效率和质量,节约开发成本,恰当的复用还可以改善系统的可维护性。而在面向对象的设计里面,可维护性复用都是以面向对象设计原则为基础的,这些设计原则首先都是复用的原则,遵循这些设计原则可以有效地提高系统的复用性,同时提高系统的可维护性。面向对象设计原则和设计模式也是对系统.........原创 2012-05-17 10:39:21 · 40220 阅读 · 12 评论 -
每个程序员都该知道的10大编程格言
每个程序员都该知道的10大编程格言(Kevin Pang):编程格言1:无风不起浪 (There is no smoke without fire)编程格言2:预防为主,治疗为辅(An ounce of prevention is worth a pound of cure:)编程格言3:不要把鸡蛋都放在一个篮子(Don't put all yo原创 2012-05-17 18:28:51 · 14312 阅读 · 3 评论 -
php 设计模式-数据映射模式(应用程序与数据库交互模式)
前面提到的设计模式大大提高了代码的可读性与可维护性。然而,在WEB应用设计与开发中一个基本的需求与挑战:数据库应用,这些设计模式都没有涉及到。数据映射模式使您能更好的组织你的应用程序与数据库进行交互。下面我将用实际代码说明,如果一个表发生变动。我们要修改客户端代码就可以了。特别是游戏项目,需求经常可能会经常变动。修改表结构,可能引起大片代码的改动。首先我们使用pdo进行数据库访原创 2012-05-15 18:51:18 · 10531 阅读 · 3 评论 -
设计模式 ( 二十 ) 访问者模式Visitor(对象行为型)
特此说明:对访问者模式理解不是特别透彻,若有误,请指正,谢谢!1.概述在软件开发过程中,对于系统中的某些对象,它们存储在同一个集合collection中,且具有不同的类型,而且对于该集合中的对象,可以接受一类称为访问者的对象来访问,而且不同的访问者其访问方式有所不同。例子1:顾客在超市中将选择的商品,如苹果、图书等放在购物车中,然后到收银员处付款。在购物过程中,顾客需要对这些商原创 2012-05-14 16:00:29 · 14415 阅读 · 1 评论 -
设计模式 ( 十九 ) 模板方法模式Template method(类行为型)
设计模式 ( 十九 ) 模板方法模式Template method(类行为型)1.概述在面向对象开发过程中,通常我们会遇到这样的一个问题:我们知道一个算法所需的关键步骤,并确定了这些步骤的执行顺序。但是某些步骤的具体实现是未知的,或者说某些步骤的实现与具体的环境相关。例子1:银行业务办理流程在银行办理业务时,一般都包含几个基本固定步骤:取号排队->办理具体业务-原创 2012-05-14 13:15:16 · 34287 阅读 · 5 评论 -
设计模式 ( 十八 ) 策略模式Strategy(对象行为型)
设计模式 ( 十八 ) 策略模式Strategy(对象行为型)1.概述 在软件开发中也常常遇到类似的情况,实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能。如查找、排序等,一种常用的方法是硬编码(Hard Coding)在一个类中,如需要提供多种查找算法,可以将这些算法写到一个类中,在该类中提供多个方法,每一个方法对应一个原创 2012-05-12 15:50:25 · 292188 阅读 · 53 评论 -
设计模式 ( 十七) 状态模式State(对象行为型)
设计模式 ( 十七) 状态模式State(对象行为型)1.概述在软件开发过程中,应用程序可能会根据不同的情况作出不同的处理。最直接的解决方案是将这些所有可能发生的情况全都考虑到。然后使用if... ellse语句来做状态判断来进行不同情况的处理。但是对复杂状态的判断就显得“力不从心了”。随着增加新的状态或者修改一个状体(if else(或switch case)语句的增多或原创 2012-05-11 17:26:22 · 103718 阅读 · 33 评论 -
设计模式 ( 十六 ) 观察者模式Observer(对象行为型)
设计模式 ( 十五 ) 观察者模式Observer(对象行为型)1.概述一些面向对象的编程方式,提供了一种构建对象间复杂网络互连的能力。当对象们连接在一起时,它们就可以相互提供服务和信息。通常来说,当某个对象的状态发生改变时,你仍然需要对象之间能互相通信。但是出于各种原因,你也许并不愿意因为代码环境的改变而对代码做大的修改。也许,你只想根据你的具体应用环境而改进通信代码。或原创 2012-05-11 11:58:24 · 30219 阅读 · 4 评论 -
设计模式 ( 十五 ) 中介者模式Mediator(对象行为型)
设计模式 ( 十五 ) 中介者模式Mediator(对象行为型)1.概述在面向对象的软件设计与开发过程中,根据“单一职责原则”,我们应该尽量将对象细化,使其只负责或呈现单一的职责,即将行为分布到各个对象中。对于一个模块或者系统,可能由很多对象构成,而且这些对象之间可能存在相互的引用,在最坏的情况下,每一个对象都知道其他所有的对象,这无疑复杂化了对象之间的联系。虽然将原创 2012-05-10 17:40:11 · 10227 阅读 · 2 评论 -
设计模式 ( 十四 ) 迭代器模式Iterator(对象行为型)
1.概述类中的面向对象编程封装应用逻辑。类,就是实例化的对象,每个单独的对象都有一个特定的身份和状态。单独的对象是一种组织代码的有用方法,但通常你会处理一组对象或者集合。集合不一定是均一的。图形用户界面框架中的 Window 对象可以收集任意数量的控制对象 - Menu、Slider 和 Button。并且,集合的实现可以有多种方式:PHP 数字是一个集合,但也是一个散列表,一个链接列原创 2012-05-10 13:14:04 · 9626 阅读 · 3 评论 -
设计模式 ( 十三 ) 命令模式Command(对象行为型)
设计模式 ( 十三 ) 命令模式Command(对象行为型)1.概述 在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,我们只需在程序运行时指定具体的请求接收者即可,此时,可以使用命令模式来进行设计,使得请求发送者与请求接收者消除彼此之间的耦合,让对象之间的调用关系更加灵活。例子1:电视机遥控器 :......原创 2012-05-09 16:31:35 · 25947 阅读 · 2 评论 -
设计模式(十一)代理模式Proxy(结构型)
设计模式(十一)代理模式Proxy(结构型)1.概述 因为某个对象消耗太多资源,而且你的代码并不是每个逻辑路径都需要此对象, 你曾有过延迟创建对象的想法吗 ( if和else就是不同的两条逻辑路径) ? 你有想过限制访问某个对象,也就是说,提供一组方法给普通用户,特别方法给管理员用户?以上两种需求都非常类似,并且都需要解决一个更大的问题:你如何提供一致的接口给某个对...原创 2012-05-08 11:51:03 · 135553 阅读 · 17 评论 -
设计模式(十)享元模式Flyweight(结构型)
设计模式(十)享元模式Flyweight(结构型)说明:相对于其它模式,Flyweight模式在PHP实现似乎没有太大的意义,因为PHP的生命周期就在一个请求,请求执行完了,php占用的资源都被释放。我们只是为了学习而简单做了介绍。1. 概述面向对象技术可以很好地解决系统一些灵活性或可扩展性或抽象性的问题,但在很多情况下需要在系统中增加类和对象的个数。当对象数量太多时,将导原创 2012-05-07 10:16:30 · 15529 阅读 · 3 评论 -
设计模式(九)外观模式Facade(结构型)
设计模式--外观模式Facade(结构型):1. 概述 外观模式,我们通过外观的包装,使应用程序只能看到外观对象,而不会看到具体的细节对象,这样无疑会降低应用程序的复杂度,并且提高了程序的可维护性。例子1:一个电源总开关可以控制四盏灯、一个风扇、一台空调和一台电视机的启动和关闭。该电源总开关可以同时控制上述所有电器设备,电源总开关即为该系统的外观模式设计。2....原创 2012-05-04 16:59:54 · 127470 阅读 · 20 评论 -
设计模式(八)装饰器模式Decorator(结构型)
设计模式(八)装饰器模式Decorator(结构型)1. 概述 若你从事过面向对象开发,实现给一个类或对象增加行为,使用继承机制,这是所有面向对象语言的一个基本特性。如果已经存在的一个类缺少某些方法,或者须要给方法添加更多的功能(魅力),你也许会仅仅继承这个类来产生一个新类—这建立在额外的代码上。 通过继承一个现有类可以使得子类在拥有自身方法的同时...........................原创 2012-05-03 17:48:46 · 36824 阅读 · 7 评论 -
设计模式(七)组合模式Composite(结构型)
设计模式(七)组合模式Composite(结构型)1. 概述在数据结构里面,树结构是很重要,我们可以把树的结构应用到设计模式里面。例子1:就是多级树形菜单。例子2:文件和文件夹目录2.问题我们可以使用简单的对象组合成复杂的对象,而这个复杂对象有可以组合成更大的对象。我们可以把简单这些对象定义成类,然后定义一些容器类来存储这些简单对象。客户端代码必须区别对...原创 2012-05-03 14:21:46 · 61027 阅读 · 10 评论 -
设计模式(六)桥连模式Bridge(结构型)
设计模式(六)桥连模式Bridge(结构型)1. 概述 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度?例子1:设想如果要绘制矩形、圆形、椭圆、正方形,我们至少需要4个形状类,但是如果绘制的图形需要具有不同的颜色,如红色、绿色、...............原创 2012-05-02 19:40:54 · 43780 阅读 · 20 评论 -
设计模式(五)适配器模式Adapter(结构型)
设计模式(五)适配器模式Adapter(结构型)1. 概述: 接口的改变,是一个需要程序员们必须(虽然很不情愿)接受和处理的普遍问题。程序提供者们修改他们的代码;系统库被修正;各种程序语言以及相关库的发展和进化。 例子1:iphone4,你即可以使用UBS接口连接电脑来充电,假如只有iphone没有电脑,怎么办呢?苹果提供了iphone电源适配器。.........原创 2012-05-02 16:02:58 · 69877 阅读 · 15 评论 -
设计模式(四)原型模式Prototype(创建型)
设计模式(四)原型模式Prototype1. 概述我们都知道,创建型模式一般是用来创建一个新的对象,然后我们使用这个对象完成一些对象的操作,我们通过原型模式可以快速的创建一个对象而不需要提供专门的new()操作就可以快速完成对象的创建,这无疑是一种非常有效的方式,快速的创建一个新的对象。例子1:孙悟空拔下一嘬猴毛,轻轻一吹就会变出好多的孙悟空来。例.....................原创 2012-05-02 10:19:47 · 28443 阅读 · 12 评论 -
设计模式(三)建造者模式Builder(创建型)
设计模式(三)建造者模Builder(http://blog.csdn.net/hguisu/article/details/7518060)1. 概述 在软件开发的过程中,当遇到一个“复杂的对象”的创建工作,该对象由一定各个部分的子对象用一定的算法构成,由于需求的变化,复杂对象的各个部分经常面临剧烈的变化,但将它们组合在一起的算法相对稳定。 例子1:买肯德基............原创 2012-04-27 18:20:57 · 37232 阅读 · 9 评论 -
设计模式(二)单例模式Singleton和单例12种写法
SINGLETON(单例)—对象创建型模式 几乎所有面向对象的程序中,总有一些类的对象需要是唯一的,例如,通过数据库句柄到数据库的连接是独占的。您希望在应用程序中共享数据库句柄,因为在保持连接打开或关闭时,它是一种开销。再如大家最经常用的IM,如QQ,在同一台电脑,一个帐号只能有唯一的登录。1. 问题怎样确保一个特殊类的实例是独一无二的(它是这个类的唯一实例),并且这个实例........................原创 2020-07-01 16:28:25 · 12241 阅读 · 2 评论 -
设计模式(一)工厂模式Factory(创建型)
设计模式一 工厂模式Factory 在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的。但是在一些情况下, new操作符直接生成对象会带来一些问题。举例来说, 许多类型对象的创造需要一系列的步骤: 你可能需要计算或取得对象的初始设置; 选择生成哪个子对象实例; 或在生成你需要的对象之前必须先生成一些辅助功能的对象。 在这些.........原创 2012-04-25 21:29:42 · 123109 阅读 · 42 评论 -
设计模式概论:封装变化
设计模式概论1. 设计模式 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。 模式.................................原创 2012-04-25 11:01:42 · 18198 阅读 · 14 评论