设计模式学习
ithzhang
继续向架构师挺进
展开
-
设计模式之策略模式学习
策略模式:它定义了算法家族,分别封装起来,让他么之间可以互相替换。此模式让算法的变化,不会影响使用这些算法的客户。 在引出策略模式时,讨论了超市收银系统。可以将各种收费项目抽象成几种操作,比如正常收费、打折、返现、返积分。。。对打折来说,之所以可以这样进行抽象因为各种折扣之间存在着相互的联系,故将其抽象为一种。返现、返积分也类似。 算法本身是一种策略,这些算法可能原创 2012-05-02 23:16:59 · 2384 阅读 · 0 评论 -
设计模式之适配器模式学习
适配器模式:将一个类的接口转换成客户希望的另外一个接口,使原本由于接口不兼容不能一起工作的那些类可以一起工作。适配器就是是一个东西适合另外一个东西。在软件开发中,系统的数据和行为都正确,但接口不符时,应该考虑适配器模式,目的是使控制范围之外的一个原有对象与某个接口匹配。适配器模式主要应用于希望复用一些现存的类,但是接口又与复用环境要求的不一致的情况。也就是说,在想使用一个已存在的类,但它的原创 2012-05-22 21:36:48 · 1783 阅读 · 1 评论 -
设计模式之抽象工厂模式学习
抽象工厂模式:提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体的类。它用于解决涉及多个产品系列的问题,包含所有产品的创建方法。 AbstractProductA和AbstractProductB是两个抽象的产品,之所以称之为抽象就是因为它们可以有两种不同的实现,ProductaA1,ProductA2,和ProductB1,ProductB2就是他它们的具体实原创 2012-05-16 20:55:02 · 1985 阅读 · 0 评论 -
设计模式之观察者模式学习
观察者模式(发布--订阅模式)定义了一种一对多的依赖关系,让多个观察着对象同时监听某一个主体对象。这个主体对象在状态发生变化时会通知所有观察者对象,使它们能够自动更新。 例子中介绍了同事上班时间炒股,让前台把风的例子。它很好的体现了依赖倒转原则,针对抽象编程而不针对具体的类,降低了程序的耦合性。秘书类和老板类均继承自通知类,炒股和看NBA类继承自观察类。#include#原创 2012-05-14 20:09:54 · 1712 阅读 · 0 评论 -
设计模式之建造者模式学习
建造者模式:将一个复杂对象的构建和它的表示分离,是同样的构建过程可以创建不同的表示。使用时用户只需要指定需要建造的类型就可以得到它们,而具体的建造细节不需知道。 建造小人结构图及代码: #includeusing namespace std;class PersonBui原创 2012-05-13 21:43:30 · 1626 阅读 · 0 评论 -
设计模式之外观模式学习
外观模式Facade(门面模式):为系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这个子系统更加容易使用。它完美的体现了迪米特原则和依赖倒转原则,是非常常用的设计模式之一。 对于书上举得买股票和基金的例子。炒股新手由于对证券知识不是完全了解,再加上股票种类众多,这种情况下很容易赔钱。而购买基金却减少很多风险,此时并不需要对股票有过多的了解,甚至可以对原创 2012-05-13 16:10:50 · 1813 阅读 · 0 评论 -
设计模式之迪米特法则(最少知识原则)学习
迪米特法则(Law of Demeter)(最少知识原则 Least Knowledge principle):如果两个类不必彼此直接通信,那么这两个类就不应该发生直接的相互作用。如果其中一个类需要调用另一个类的方法的话,可以通过第三者转发这个调用。 迪米特法则首先强调的前提是:在类的设计上,每一个类都应当尽量降低成员的访问权限。也就是说类应当包装好自己的private,不需要让别的类原创 2012-05-13 09:35:41 · 4033 阅读 · 0 评论 -
设计模式之模板方法模式
模板方法模式:定义了操作中的算法的骨架,而将一些步骤延迟子类中。模板方法使得子类可以不改变一个算法,即可重定义该算法的某些特定步骤。 当我们完成在某一细节层次一致的一个过程或是一系列步骤时,个别步骤在更详细的层次上实现可能不同时,通常考虑用模板方法模式。 模板方法是通过把不变的行为搬到基类,取出子类的重复代码来实现它的优势。它提供了一个很好的代码复用平台。当不变的和变化的原创 2012-05-13 08:50:25 · 1515 阅读 · 0 评论 -
设计模式之工厂模式学习
与简单工厂模式相比,工厂模式为每个类增加了一个工厂类。每个工厂类返回它所对应的类的对象指针。 简单工厂模式的最大优点:工厂类中包含了必要的逻辑判断。根据客户端的选择条件动态的实例化相关的类。没有在客户端实现判断,也就去除了与客户端的依赖。简单工厂模式实现计算类结构图: 工厂模式实现计算类结构图: 工厂模式实现代码:#includeusing namespac原创 2012-05-10 20:56:54 · 1668 阅读 · 0 评论 -
设计模式之原型模式学习
由于没有接触过C#,不知《大话设计模式》所云。但无看了《大话设计模式》觉得非就是深拷贝和浅拷贝的问题。在此谈谈我对C++深拷贝与浅拷贝的认识,不足之处请指出。 对编程来说简单的复制粘贴极有可能造成重复代码的灾难,也很容易造成存在问题的代码的传播。 原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型对象创建新的对象。通俗的说就是从一个对象再创建另一个可定原创 2012-05-11 16:34:29 · 1933 阅读 · 0 评论 -
设计模式之简单工厂模式学习
学习C++有一两年了,面向对象思想也有所接触。使用过MFC以及OSG类库进行过开发,无非就是调用别人设计好的类库,要说自己使用面向对象的思想去开发程序,这个还真没有。 意识到自己在这方面的匮乏,开始学习设计模式。教材选用《大话设计模式》,每个章节的学习过程分为三部分:第一部分,阅读课本,第二部分:按照书上例子写出C++代码的对应版本。第三部分:博客上的学习笔记。 编程原创 2012-05-01 22:21:47 · 2111 阅读 · 1 评论 -
设计模式之代理模式学习
代理模式:为其他对象提供一种代理,以控制对这个对象的访问。 Subject类,被代理的类。定义了RealSubject和Proxy的接口。这样代理类就可以执行被代理的所有行为。RealSubject定义Proxy所代理的真实实体。Proxy类,代理类,与RealSubject有相同的接口。#includeusing namespace std;class Subjec原创 2012-05-09 20:45:44 · 1350 阅读 · 0 评论 -
设计模式之装饰模式学习
装饰模式:动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。 Component定义了一个对象的接口,可以给这些对象动态的添加职责。ConcreteComponent定义了一个具体的对象。也可以给这个对象增加职责。Decorator,装饰抽象类,继承了Component,从外类来扩展Component的功能。但对于Component来说是无需知道Dec原创 2012-05-09 09:08:47 · 1365 阅读 · 0 评论 -
设计模式之依赖倒转原则学习
可以把电脑理解成大的软件系统,任何部件如cpu、内存、显示器,都可以看成程序里封装的类或程序集。由于pc易插拔的方式,任何部件都可以很方便的更换,而不影响其他部件。面向对象把这种关系叫做:强内聚,低耦合。pc很好的体现了面向对象的几大原则。如单一原则:内存坏了只需要将内存条换掉,不应该成为更换cpu的理由。各个部件功能独立,有各自的职责,耦合性低。如开放封闭原则:内存不够只要插槽足够就可以添加,硬原创 2012-05-08 09:14:17 · 1873 阅读 · 0 评论 -
设计模式之开放--封闭原则学习
开放封闭原则:软件实体应该可以扩展,但是不可以修改。它有两个特性:一,对扩展是开放的,二:对修改是封闭的。开放即可以操作,关闭即不可以操作。在设计模式中,这种不能修改却可以扩展的思想,就是开放封闭原则、我们在做任何系统时,不要奢望系统一开始需求就确定。这是不现实也是不科学的。既然需求是变化的,那么如何在需求变化时,软件相对容易修改,不至于说新的需求一来整个程序就得推到重来。怎样的需求才能面原创 2012-05-04 09:22:25 · 3048 阅读 · 1 评论 -
设计模式之单一职责原则学习
单一职责原则:就一个类而言应该仅有一个引起它变化的原因。比如写一个窗口应用程序。我们会创建一个类,将各种各样的代码,如某种算法的代码或是访问数据库的代码,都放在这个类中。以后一旦需求有所更改就必须修改这个类。各个功能的耦合性太大,牵一发而动全身。维护很麻烦,复用不可能,也缺乏灵活性。由于c语言是我的第一门编程语言,这么多年的使用,面向过程的思想早已根深蒂固。短时间很难培养起使用面向对象开发原创 2012-05-03 11:07:20 · 1847 阅读 · 1 评论 -
设计模式之状态模式学习
面向对象设计其实就是希望做到代码责任的分解,类中函数过长意味着它的责任过于大了,一旦需求有任何更改,这个方法可能都需要修改。这违背了单一职责原则,也违背了开放封闭原则。 状态模式:当一个对象的状态改变时允许改变其行为。这对象看起来像是改变了其类。 状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂是的情况。大部分人的一般做法是使用switch--case或者使用if原创 2012-05-22 20:53:35 · 1777 阅读 · 1 评论