![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
面向对象与设计模式
zzulp
这个作者很懒,什么都没留下…
展开
-
如何有效编写软件的75条建议
1. 你们的项目组使用源代码管理工具了么? 应该用。VSS、CVS、PVCS、ClearCase、CCC/Harvest、FireFly都可以。我的选择是VSS。2. 你们的项目组使用缺陷管理系统了么? 应该用。ClearQuest太复杂,我的推荐是BugZilla。 3. 你们的测试组还在用Word写测试用例么? 不要用Word写测试用例(Test Case)。应该用一个专门的系统,可以是Test Manager,也可以是自己开发一个ASP.NET的小网站。主要目的转载 2011-01-17 18:58:00 · 826 阅读 · 0 评论 -
设计模式与实例代码:Decorator模式
意图/定义:动态地给一个对象添加一些额外的职责,而这些职责可能以任意的顺序来添加,从而提供了比生成子类更灵活的方法来添加功能问题:要使用的对象可以提供所需的功能,但可能要为这个对象添加某些功能,这些附加功能可能发生在对象的基础功能之前或之后。参与者与协作者:被装修者让装修者为自己添加功能,但其不需要了解自己被如何装修。效果:所添加的功能放在小对象中,可以在被装修者之前或之后动态的添加及原创 2012-04-01 01:11:19 · 893 阅读 · 0 评论 -
设计模式与实例代码:Observer模式
意图/定义:在对象间定义一种一对多的依赖关系,这样当一个对象的状态改变时,所有依赖者都将和到通知并自动更新问题:当某个事情发生时,需要向一系列变化着的对象发出通知解决方案:观者者将监视某个事件的责任委托给主题对象参与者和协作者:Subject知道自己的Observer,因为Observer会向其注册。主题必须在所监视的事件发生通知观察者效果:如果某些Observer只对事件的一个子原创 2012-04-10 23:44:03 · 866 阅读 · 0 评论 -
设计模式与实例代码:Template Method模式
意图/定义:定义一个操作算法的骨架,将一些步骤推迟到子类中实现。使得子类可以不改变算法的结构而重定义此算法的步骤问题:要完成在某一细节层次一致的一个过程或一系列步骤,全其个别步骤在更详细的层次上实现可能不同解决方案:允许定义可变的子步骤,同时保持基本过程一致参与者与协作者:模板方法由一个抽象类组成,这个抽象类定义了需要覆盖的基本方法,每个从这个抽象类派生的具体类将为此模板实现新方法。原创 2012-04-11 00:01:20 · 720 阅读 · 0 评论 -
设计模式实例与代码:Prototype模式
意图/定义:通过复制一个原型的实例来创建新的对象,而不是新建新实例,被复制的实例称之谓原型问题:当新建一个实例步骤较多或代价较高,而复制一个已有实例比较快捷或代价较低解决方案:为对象原型提供复制自己的操作参与者与协作者:具体原型需要实现复制自己对象的操作,客户只请求已有原型复制其自身,即得到新的实例效果:简化了客户对于创建新对象所需要了解的知识,客户不再需要重新自己费劲的创建一个新原创 2012-04-12 00:34:18 · 1128 阅读 · 0 评论 -
设计模式与实例代码:Composite模式
意图/定义:将对象组合成树形结构以表现“整体/部分”层次结构,组合可以让客户以一致的方式处理个别对象以及对象组合。问题:你想表示对象的部分/整体层次结构或者需要忽略组合对象与单个对象的不同解决方案:参与者和协作者:在Composite中用来存储部件实现Component接口中实现的有关操作效果:组合模式解耦了客户程序与复杂元素内部结构实现:原创 2012-04-25 09:00:20 · 947 阅读 · 0 评论 -
设计模式实例与代码:Factory Method模式
意图/定义:定义一个用于创建对象(产品)的(工厂)接口,让子类(具体工厂)决定实例化哪一个类(产品)。将实例化推迟到子类。问题:一个类需要实例化另一个类的子类,但不知道是哪一个。工厂方法允许子类进行决策。解决方案:让派生类对实例化哪个类和如何实例化类进行决策参与者与协作者:Produect是工厂所要创建的类型的接口。而Creator是定义工厂的接口。效果:客户需要继承Creator原创 2012-04-17 23:26:46 · 1234 阅读 · 0 评论 -
设计模式实例与代码:Abstract Factory模式
意图/定义:需要为特定的客户提供对象组问题:需要实例化一组相关的对象解决方案:协调对象组的创建。撮合 种方法,将如何执行对象实例化的规则从使用这些对象的客户对象中提取出来参与者与协作者:AbstractFactory为如何创建对象组的每个成员定义接口。通常每个组都独立的ConcreteFactory来创建效果:这个模式将"使用哪些对象的规则"与"如何使用这些对象"的原创 2012-04-18 23:54:10 · 1093 阅读 · 0 评论 -
设计模式实例与代码:Builder模式
意图/定义:将一个复杂对象的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。问题:面对复杂对象的创建工作,通常各个部分对象用一定的算法构成,但复杂对象的各个部分经常面临着剧烈的变化,而将它们组合在一起的算法相对稳定 解决方案:将各个部分的创建独立封装起来参与者与协作者:抽象的Builder类,为导向者可能要求创建的每一个构件(Part)定义一个操作(接口)。这些操作缺省情况下原创 2012-04-19 22:47:45 · 1480 阅读 · 0 评论 -
设计模式与实例代码:Visitor模式
定义/意图:Visitor用来表示一组特定元素上的操作,通过Visitors将行为分离出来,当需要在这组元素上增加新的操作时,只需要实现新的Visitor即可。问题:系统有一组稳定的元素,但针对其的操作在以后会扩展,若元素的类型容易扩展,则不适合用Visit模式解决方案:把元素和元素上的操作分离,将所有操作的接口抽象出来,参与者和协作者:Visitor基类声明了针对所有具体元素类上的操原创 2013-05-06 00:17:37 · 1118 阅读 · 0 评论 -
设计模式与实例代码:Bridge模式
意图/定义:将一组实现与另一组使用它们的对象分离,使得各自可以独立变化问题:一个抽象类的多个派生类必须使用多个实现,但不能出现类爆炸解决方案:为所有实现定义一个接口,供抽象类的所有派生类使用参与者与协作者:抽象类的具体实现使用实现类的派生类,却无需知道自己使用的是具体哪个实现效果:实现与使用实现的对象被解耦,提供了可抿生,客户对象无需操心实现问题实现:将实现原创 2012-04-09 23:36:49 · 953 阅读 · 0 评论 -
设计模式与实例代码:Strategy模式
定义/意图:定义一组算法并对其封装,使其可以互相替换,并根据所处上下文,使用不同的算法或业务规则问题:对所需要算法的选择取决于发出请求的客户或要处理的数据。如果只有一些不会变化的算法,则不需要Strategy模式解决方案:把算法的选择和算法的实现分离,允许根据上下文进行选择参与者与协作者:Strategy基类指定不同算法的公共接口,具体Strategy实现不同的算法,上下文通过类型为S原创 2012-03-30 23:31:33 · 775 阅读 · 0 评论 -
设计模式与实例代码:Adapter模式
定义/意图:将一个类的接口转换成客户希望的另外一个接口,使控制范围之外的一个原有类与我们期望的接口匹配。问题:系统的数据和行为都正确,但接口不符:解决方案:Adapter模式提供了具有所需要接口的包装类参与者与协作者:Adapter改变了被适配类的接口,使得被适配类与Adapter的基类接口匹配。这样client就可以无分别的使用被适配的对象效果:适配器模式使原有对象能够适应新的类原创 2012-03-29 22:50:54 · 1150 阅读 · 0 评论 -
Design Pattern: Mediator 模式
<br />Mediator的意思是中介者、调节者、传递物,顾名思义,这个模式在程式中必然负担一个中介、调节、传递的工作。<br /> 物件导向设计中,每个物件所负担的工作尽可能的简单明了,鼓励物件将工作分布至其它物件上,让一群工作属性相同的物件得以共同合作,即所谓高聚合性,以增加物件的可重用性。<br /> 然而在组织物件工作的同时,物件彼此之间可能知道彼此的存在,并相互依赖,这就使得物件之间的耦合性相对的提高,最差的情况下,所有的物件都知道彼此的存在,这又会使得系统的重用性降低。<br /> Media转载 2011-04-20 17:14:00 · 887 阅读 · 0 评论 -
面向对象设计之一 封装与共生性
1 封装 没有经过封装的原始代码规定为0级封装,而面向过程的子程序可以称为一级封装。而类则封装了众多的子程序,集合在一起形成一个高级别的封装,因此类是二级封装。组合类的包,则可以称为三级封装,而构件则可以看作更四级封装。2 共生性在原创 2011-09-21 23:57:01 · 1352 阅读 · 0 评论 -
面向对象设计之二 类的领域、依赖度与内聚类型
1 类的领域一个标准的面向对象的系统包含的类通常来自于四个主要的领域:应用领域、商业领域、结构领域和基础领域。在每个领域中都有几组类。1.1 基础领域基础领域中所包含的类具有非常广泛的使用范围,基础领域有三组类:基础性的、结构性的、语义性的。每组类都有一些类原创 2011-09-24 14:30:55 · 1535 阅读 · 0 评论 -
系统设计中业务规则与系统规则的应用
系统设计中业务规则与系统规则的应用 在面向商业应用开发系统的时候,常常会遇到业务规则的说法。这些商业规则也可称之谓策略,对业务流程起到了限制和约束的作用。在传统的应用系统开发和实施过程中。业务规则(Business Rules)是在需求分析阶段由用户提供,内嵌在原创 2011-10-10 16:47:23 · 3506 阅读 · 0 评论 -
面向对象设计之三 类的状态空间和行为
类的状态空间和行为1 类的状态空间与行为 一个类表示一种共同的抽象性,这种抽象性是属于这个类的所有个体对象的共有属性。上面这个类的说明十分常见,但这句话的真正意义是什么呢? 抽象性含义是指我们在软件对象中不必考虑到真原创 2011-10-02 18:24:18 · 1820 阅读 · 0 评论 -
面向对象设计之四 类型一致性和闭合行为原则
类型一致性和闭合行为 1 类class和类型type 从抽象的角度来理解,最好将类视为类型的实现。也就是说类型包括了类的目标以及类的状态空间和行为。实际上,一个类型可以有多个类,每个类都包括自己独立的内部设计。一个典型的例子是STL链表类型,在GNU实现中的li原创 2011-10-02 22:12:02 · 1885 阅读 · 0 评论 -
面向对象设计之五 继承与多态的危险性
继承与多态的危险性继承与多态使面向对象的设计方法与传统的软件开发方式区别开来。然而滥用继承也会将一些设计方案带入无法实现的地步。1 继承的滥用本节的目标是审查不同形式的错误的继承,以避免在将用的工程项目中滥用继承。1.1 组合与继承混用混淆了is-a与has-a的关系,使用继承将整体的多个部分整合在一起。例如一架飞机是由机身、机翼、引擎等各部分组合的,而错误的将飞机继承自机原创 2011-10-25 23:13:51 · 1160 阅读 · 0 评论 -
设计模式与实例代码:单例模式
意图:为保证一个类仅有一个实例,并提供一个访问它的全局访问点,所有实体均使用此对象的相同的实例,而无需将引用传给它们。 问题:几个不同的客户对象需要引用同一对象,而且希望确保这种类型的对象数目不超过一个。、 解决方案:保证一个实例 参与者与协作者:客户对象只能通过getInstance接口创建单件实例 效果:客户对象无需要操心是否已存在单件实例,这是由单件类原创 2012-03-23 21:35:28 · 1333 阅读 · 0 评论 -
设计模式与实例代码:Facade模式
意图:希望简化原有系统的使用方式,需要定义自己的接口问题:只需要使用某个复杂系统的子集,或者需要以一种特殊的方式与系统交互解决方案:Facade为原有系统的客户提供一个新的接口,有可能减少客户所需要处理的对象数量参与者与协作 者:为客户提供了一个简化接口,使用系统容易使用效果:Facade模式简化了对所需要子系统的使用过程。但是,由于Facade并不完整,因此客户可能无法使用某些功原创 2012-03-24 22:18:59 · 1217 阅读 · 0 评论 -
设计模式与实例代码:Proxy模式
定义与意图:为某一对象提供一个代理和占位,以达到控制访问的目的。有三种不同的代理,远程代理,虚拟代理,保护代理。类图:对比:主要是使用场景上容易和装饰器模式混淆。因为我们在代理类中为真正的被代理对象装饰了一定的功能,但从类图结构上,二者有较大的区分度。代理需要转发被代理对象的所有接口。而装饰器类没有这种约束。在选择上,主要从意图上进行区分。如果目的是接管某一类型的所有操原创 2016-04-17 19:18:23 · 1319 阅读 · 0 评论