随笔分类 -  面向对象设计

摘要:作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ 1.我们需要理解报社、订阅系统和订报人之间的关系,订报人通过订阅系统订报,一旦报社有新的报纸,订阅系统就会派人送或者邮寄给订报人新的报纸。然后,出版者+订阅者就是观察者模式,只不过名称不一样,主题(Subject,或者叫做Observabler)类比于出版者,是事件发生的主体,订阅者改称为观察者... 阅读全文
posted @ 2012-12-17 21:50 gnuhpc 阅读(1191) 评论(0) 推荐(0)
摘要:作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ 1)使用场景:一个对象可能要访问共享资源来完成它所要提供的服务,在多线程情况下,多个这样的对象在一起就会产生意想不到的后果,比如竞争。监视器就是在这样的一个对象上设置一个锁,以保证在给定时间内,只有一个线程可以执行这个对象上的任何一个方法。 2)例子:我们创建一个日志记录的类 public cla... 阅读全文
posted @ 2012-12-17 21:47 gnuhpc 阅读(476) 评论(0) 推荐(0)
摘要:作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ 1)使用场景:牵涉到对数据对象进行修改时,可能由于修改的顺序而造成数据的错乱,此时使用不变对象就可以避免,而且还可以不使用高开销的synchronizing方法。一个数据模型类的实例所持有的数据在整个生命周期中都不变,这个类就会是线程安全。 2)设计方法: a)所有的实例变量都必须在... 阅读全文
posted @ 2012-12-17 21:44 gnuhpc 阅读(370) 评论(0) 推荐(0)
摘要:作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ a)使用场景:在程序设计中,我们可以把所用要用到的常量设计为一个独立的类,使得对常量的管理有效清晰。 b)应用举例: 我们考虑一个顾客数据存储的应用场景,要用到三种类,Account, Address 和 CreditCard来代表用户数据信息。 ... 阅读全文
posted @ 2012-12-17 21:42 gnuhpc 阅读(684) 评论(0) 推荐(0)
摘要:作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ 本来不想写这个的,太基础了,不过为了整个学习笔记的完备性还是简单写几笔给自己留着看。 1.存取方法也就是所谓的getter and setter,对于类中的private成员提供对外的接口,这样的设计使得最后的在程序修改时只需要修改这些setter and getter,而不必工程中修改所有与这个... 阅读全文
posted @ 2012-12-17 21:39 gnuhpc 阅读(501) 评论(0) 推荐(0)
摘要:作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ 1.抽象类的特点: 包含至少一个以abstract表示的没有实现的方法——抽象方法,来代表父类中的可变方法。当然抽象类可以提供实现的具体方法。 包含的有具体实现的方法来代表父类中的不可变的通用方法。 不能被实例化。 子类继承时必须实现去所有抽象方法,... 阅读全文
posted @ 2012-12-17 21:37 gnuhpc 阅读(526) 评论(0) 推荐(0)
摘要:作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ a)使用场景:解决多重继承和Client需要多Service_Provider的支持。 b)典型UML: c)举例:薪水计算类的设计 不同的类别有不同的薪水计算方法,那么getSalary方法可以抽象到一个接口SalaryCalculat... 阅读全文
posted @ 2012-12-17 21:36 gnuhpc 阅读(1809) 评论(0) 推荐(0)
摘要:作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ 1.UML是Object Management Group推出的用于简化复杂软件工程流程的工具,使用UML,用户可以定制并且可视化软件和非软件的设计。注意UML只是一种建模语言,它只定义了words和grammar,而并没有定义建模的过程或流程。 2.上文中提到的静态模型和动态模型的分类也... 阅读全文
posted @ 2012-12-17 21:32 gnuhpc 阅读(657) 评论(0) 推荐(0)
摘要:作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/1.概念Resource Acquisition Is Initialization 机制是Bjarne Stroustrup首先提出的。要解决的是这样一个问题:在C++中,如果在这个程序段结束时需要完成一些资源释放工作,那么正常情况下自然是没有什么问题,但是当一个异常抛出时,释放资源的语句就不会被执行。于是Bjarne Stroustrup就想到确保能运行资源释放代码的地方就是在这个程序段(栈帧)中放置的对象的析构函数了,因为stack winding会保证它们的析构函数都会被执行。将初始化和资源释放都移动 阅读全文
posted @ 2012-12-04 23:07 gnuhpc 阅读(9066) 评论(2) 推荐(4)
摘要:作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ 1.书中举了一个鸭子类的设计,有些会飞或者会叫,有些不会飞可能也不会叫,用继承则导致不该有的功能通过继承而继承了下来,使用接口则代码无法做到最大程度的重用。进而引出设计原则1:找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起,把会变化的部分取出并封装起来,好让其他部分不会... 阅读全文
posted @ 2012-10-16 17:48 gnuhpc 阅读(2023) 评论(0) 推荐(1)
摘要:作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ 1.简介 这个机制是Private Implementation的缩写,我们常常听到诸如“不要改动你的公有接口”这样的建议,所以我们一般都会修改私有接口,但是这会导致包含该头文件的所有源文件都要重新编译,这会是个麻烦事儿。Pimpl机制,顾名思义,将实现私有化,力图使得头文件对改变不透明。 2.机制... 阅读全文
posted @ 2012-06-30 08:13 gnuhpc 阅读(5460) 评论(1) 推荐(0)
摘要:作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ 在C++的程序设计中有一些设计开发的典型技巧需要整理讨论,在此抛砖引玉,为自己做积累,请高人也多多指教。 1.简介 在标准C++库中我们可以看到这样的一个现象: 6个公有虚函数,并且都是std::exception::what()和其重载。 142个非公有虚函数。 这样设计的目的何在呢,为什么“多此一举”的把虚函数设置为非公有呢? 这就是NVI机制要求的:将虚函数声明为非公有,而将公有函数都声明为非虚——虚拟和公有选其一。 2.机制分析 程序员常常将基类中的虚函数公有化,来... 阅读全文
posted @ 2012-01-17 16:38 gnuhpc 阅读(2805) 评论(2) 推荐(4)
摘要:作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ 1.什么是 CRC card? CRC (Class-Responsibility-Collaborator) Card是目前比较流行的面向对象分析建模方法。在CRC建模中,用户、设计者、开发人员都有参与,完成对整个面向对象工程的设计。 CRC卡是一个标准索引卡集合,包括三个部分:类名、类的职责、类的协作关系,每一张卡片表示一个类。 · 类 代表一系列对象的集合,这些对象是对系统设计的抽象建模,可以是一个人、一件物品等等,类名写在整个CRC卡的最上方。 · 职责 包括这个类对自身信... 阅读全文
posted @ 2012-01-13 13:20 gnuhpc 阅读(9451) 评论(0) 推荐(0)