大话设计模式
Huaerge
这个作者很懒,什么都没留下…
展开
-
大话设计模式之面向对象基础
<br />A.2 类与实例<br /> 对象是一个自包含的实体,用一组可识别的特性和行为来标识。 <br /> 面向对象编程:Object-Oriented Programming<br /> 类就是具有相同的属性和功能的对象的抽象的集合。<br /> 实例,就是一个真实的对象。实例化就是创建对象的过程,使用new关键字来创建。<br />A.3 构造方法<br /> 构造方法,又叫构造函数,其实就是对类进行初始化。构造方法与类同名,无返回值,也不需要void, 在new时候调用原创 2010-10-18 22:41:00 · 875 阅读 · 0 评论 -
设计模式之十三 建造者模式(建造小人)
<br /><br /> 建造者模式(Builder)(又叫生成器模式),将一个复杂对象的构建和表示分离,使得同样的构建过程可以创建不同的表示。<br /> Builder是为创建一个Product对象的各个部件指定的抽象接口;<br /> ConcreteBuilder是具体的建造者,实现Builder接口,构造和装配各个部件;<br /> Product是具体的产品;<br /> Director是指挥者,用来构建一个使用Builder接口的对象。<br /> 建造者模式主要用于创原创 2010-11-07 10:11:00 · 1403 阅读 · 1 评论 -
设计模式之十二 外观模式-股票基金
<br /> 外观模式(Facade),为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。<br /> 其实就是在客户端和一堆子类中间加了一个简单的接口,从而使得客户端不需要知道一些更加细节的东西。充分体现了依赖倒转原则(高层模块不依赖低层模块,它们都依赖于抽象)和迪米特法则(如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某个方法的话,可以通过第三者转发这个调用)。<br />原创 2010-11-01 21:05:00 · 739 阅读 · 0 评论 -
设计模式之十 模板方法模式
<br /> <br /> 感觉就是父类中定义个方法的接口,让子类去具体实现,每个子类的实现方式都不一样。<br /> 既然用了继承,并且肯定这个继承有意义,就应该要成为子类的模板,所有重复的代码都应该要上升到父类去,而不是让每个子类都去重复。<br /> 当我们要完成在某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时,我们通常考虑用模板方法模式来处理。<br /> <br />模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以原创 2010-10-30 22:36:00 · 541 阅读 · 0 评论 -
设计模式之九 原型模式-简历复制
<br /> <br /> 原型模式(Prototype),用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。<br /> 原型模式其实就是从一个对象再创建另外一个可定制的对象,而且不需要知道任何创建的细节。<br /> 一般在初始化的信息不发生变化的情况下,克隆是最好的办法。这既隐藏了对象创建的细节,又对性能是大大的提高。<br />浅复制:被复制对象的所有变量都含有与原来的对象相同的值,而所有的其它对象的引用都仍然指向原来的对象。<br />深复制:把所有引用对原创 2010-10-30 21:23:00 · 773 阅读 · 0 评论 -
设计模式之八 工厂方法模式
简单工厂模式的最大优点在于工厂类包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。(当添加新的方法的时候必然要改变工厂类,例如给运算工厂类的方法添加“case”判断,违背了开放-封闭原则) 工厂方法模式实现时,客户端需要决定实例化哪一个工厂来实现运算类,选择判断的问题还是存在的,也就是说,工厂方法把简单工厂的内部逻辑判断移到了客户端代码来进行。你想要加功能,本来是改工厂类的,而现在是修改客户端! 把计算器从简单工厂模式修改到工厂方法模原创 2010-10-29 13:52:00 · 585 阅读 · 0 评论 -
设计模式之十一 迪米特法则-无熟人难办事
<br /><br />迪米特法则(LoD)(也叫最少知识原则),如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。<br /> 迪米特法则的前提是在类的结构设计上,每一个类都应当尽量降低成员的访问权限,即一个类包装好自己的private状态,不需要让别的类知道的字段或行为就不要公开。<br />迪米特法则的根本思想,是强调了类之间的松耦合。在程序设计时,类之间的耦合越弱,越有利于复用,一个处于弱耦合的类被修原创 2010-10-30 23:02:00 · 777 阅读 · 0 评论 -
设计模式之五—— 会修电脑不会修收音机—依赖倒转模式
<br />单一职责问题:刚才修电脑的事,显然内存坏了,不应该成为更换CPU的理由,它们各自职责是明确的;<br />开放-封闭原则:内存不够只要插槽足够久可以添加,硬盘不够可以用移动硬盘等,PC的接口是有限的,所以扩展有限,软件系统设计得好,却可以无限地扩展。<br /><br />依赖倒转原则<br /> 抽象不应该依赖细节,细节应该依赖于抽象(针对接口编程,不要对实现编程)针对抽象编程而不是针对细节编程<br />依赖倒转原则<br /> A.高层模块不应该依赖低层模块。两个都应该依赖抽象。<原创 2010-10-25 20:36:00 · 1414 阅读 · 0 评论 -
设计模式之三 拍摄UFO-单一职责原则
<br />单一职责原则:<br /> 就一个类而言,应该仅有一个引起它变化的原因<br /> 软件设计真正要做的许多东西,就是发现职责并把那些职责相互分离。<br />如何判断算法应该分离出类类呢?<br /> 如果你能够想到多于一个的动机去改变一个类,那么这个类就具有多于一个的职责,此时就应该考虑类的职责分离。<br /> <br /> 如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭原创 2010-10-25 19:52:00 · 615 阅读 · 0 评论 -
设计模式之六 装饰模式
<br />装饰模式<br /> 动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。<br /> 装饰模式是为已有功能动态地添加更多功能的一种方式。<br /> 装饰模式把每个要装饰的功能放在单独的类中,并让这个类包含它所要装饰的对象,因此,当需要执行特殊行为时,客户代码就可以在运行时根据需要有选择地,按顺序地使用装饰功能包装对象了。<br /> <br />装饰模式的优点是:<br />1.把类中的装饰功能从类中搬移去除,这样可以简化原有的类。<br />2.有效地把类原创 2010-10-25 22:11:00 · 508 阅读 · 0 评论 -
设计模式之四——开放-封闭原则
开放-封闭原则 是说软件实体(类、模块、函数等等)应该可以扩展,但是不可修改。 这个原则其实是有两个特征,一个是说“对于扩展是开放的(open for extension)”,另一个是说“对于更改是封闭的(closed for modification)” 怎样的设计才能面对需求的改变却可以保持相对稳定,从而使得系统可以在第一个版本以后不断推出新版本呢? 无论模块是多么的“封闭”,都会存在一些无法对之封闭的变化。既然不可能完全封闭,设计人员必须对于他设计的模块应该对哪种变化封闭做出选原创 2010-10-25 20:09:00 · 609 阅读 · 0 评论 -
设计模式之二 商场促销-策略模式
策略模式是一种定义一系列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合。 策略模式(Strategy):它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。 当不同的行为堆砌在一个类中时,就很难避免使用条件语句来选择合适的行为。将这些行为封装在一个个独立的Strategy类中,可以在使用这些行为的类中消除条件语句。 代码写完之后,感觉它与简原创 2010-10-24 20:11:00 · 2212 阅读 · 1 评论 -
设计模式一:简单工厂模式(计算器)
2010-10-189月24号的时候开始看大话设计模式觉得非常好,当时就决定十一的时候要把23个设计模式看完,并且用C++实现一遍代码,结构十一玩了三天后面又加班,最后只是看了一遍,只写了几章的代码,然后就拖到现在,从今天开始好好写,一天一个设计模式。工厂模式从一个简单的计算器开始,一开始使用一个main函数搞定所有问题,然后业务与逻辑分离,将函数的实现写到一个函数里,到最后是把每种运算方式都写成一个类,运用工厂方式。让俺真正体会到了面向对象编程的封装,继承和多态。下面是俺写的代码。主函数// Calcul原创 2010-10-18 22:57:00 · 3663 阅读 · 2 评论 -
设计模式之十四 观察者模式(老板回来我不知道)
类似于订阅模式 观察者模式(Observer)(又叫做发布-订阅‘Publish/Subscribe’模式),定义了一种一对多的依赖关系,让多个 观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。 Subject类,可翻译为主题或抽象通知者,一般用一个抽象类或者一个借口实现。它把所有对观察者对象的引用保存在一个聚集里,每个主题都可以有任何数量的观察者。抽象主题提供一个接口,可以增加和删除观察者对象。 Obse原创 2010-11-07 11:52:00 · 1178 阅读 · 0 评论