谁是面向对象设计中的霸主?(上)

在面向对象的世界里,设计模式从来就没有最好最强的,各个模式从来就谁也不服谁,彼此明争暗斗,未曾善罢甘休。今天,连同简单工厂模式在内的24个设计模式齐聚中原,霎时间,乌云密布,杀气冲天,面向对象的世界里要迎来一场浩劫,血雨腥风,在所难免

在资格赛中,来自工厂家族的简单工厂模式首先被灭掉了,其致命的失误在于简单工厂模式根本不符合开放—封闭原则,因此惨遭灭门也是不足为怪的。然而让人欣慰的是,工厂家族的另两个派系工厂方法模式和抽象工厂模式都晋级了小组赛,并且被分在了同一组,这样看来他们不得不自相残杀,其命运令人堪忧啊。

我们来看看各个模式的分组情况:首先是创建型模式小组,分别包含单例模式、工厂方法模式、抽象工厂模式、建造者模式和原型模式5个派系,其次是结构型模式小组:分别包含适配器模式、装饰模式、桥接模式、组合模式、享元模式、代理模式以及外观模式7大实力强劲的门派,由于本组的各个模式实力都比较强,因此也被称为死亡之组,最后是行为型模式组,由于这一组的的派系较多,被分为了两个小组:行为一组和行为二组,先来看行为一组都有谁,观察者模式、模板方法模式、命令模式、状态模式和职责链模式,行为二组有解释器模式、中介者模式、访问者模式、策略模式、备忘录模式、迭代器模式。

首先,我们了解一下创建型模式组的各个模式都有什么过人之处,如何能在面向对象的设计中占有一席之地,以至于能够称霸武林。

抽象工厂模式:提供一个创建一系列或者相关依赖对象的接口,而无需指定它们具体的类。

建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂模式使一个类的实例化延迟到其子类。

原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

单例模式:保证一个类仅有一个实例,并且提供一个访问它的全局访问点。

大家各就各位后,开始了激战:抽象工厂模式说:创建型模式的优势在于隐藏了这些类的实例是如何被创建和放在一起的,整个系统关于这些对象所知道的是由抽象类所定义的接口。如此一来,创建型模式在创建了什么,谁创建的,怎么被创建的以及何时创建的等方面提供了很大的灵活性。

原型模式使出了自己的绝招:我们可以建立相应数目的原型并克隆他们通常比每次用合适的状态收工实例化该类更方便一些。

建造者模式也用了独门武功:我们将一个复杂对象的构建与它的表示分离,如此便可轻松地改变一个产品的内部表示,并且使得构造代码和表示代码分开。这样对客户来讲,无需关心产品的创建过程,而只要告诉我们需要什么就可以用同样的构建过程创建不同的产品出来。

单例模式略显单薄,但也不甘示弱:对一些类来说,一个实例是非常重要的,一个全局对象可以使得一个对象被访问,但是不能防止客户实例化多个对象,而我们的独门秘籍就是让类自身负责保存它的唯一实例,同时将类外的实例化道路封死,并且提供一个访问该实例的方法,这样就使得对唯一实例可以严格地控制客户怎样以及何时访问它。

最后工厂方法模式放出了大招,顿时天昏地暗:天下设计,无不源自工厂,当设计者发现需要更大的灵活性时,方才向其他创建型模式演化!溯其本源,在我工厂!

果然是杀伤力极强的武功,尽显王者风范,最终的结果不言而喻

谁是面向对象设计中的霸主?(上)

时间: 2024-10-24 00:56:08

谁是面向对象设计中的霸主?(上)的相关文章

谁是面向对象设计中的霸主?(中)

在上篇博文中.我们一起了解了创建型模式组的战况,以下我们来看看号称"死亡之组"的结构型模式的战况.所谓结构型模式,就是针对系统的结构进行设计,重点考虑产品的层次结构等问题. 以下我们一起来了解一下本组各个门派的资料: 适配器模式:讲一个类的接口转换成客户希望的另外一个接口.适配器模式使得原本因为接口不兼容而不能一起工作的那些类能够一起工作. 桥接模式:将抽象部分与它的实现部分分离,使它们都能够独立地变化. 组合模式:将对象组合成树形结构以表示"部分-总体"的层次结构

面向对象设计中抽象类与接口的区别

在OOD(面向对象设计)中,经常会用到抽象类或接口,[注:在C++中,没有接口的概念,只有抽象类:而在Java中两者都存在].而在使用过程中,也许会有不少人认为接口和抽象类差不多,然后就想当然地觉得可以相互完全替换.事实上,虽然他们有很多相似点,但也有很大差异. 1.抽象类与接口的出现条件 在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是反过来却不是这样.并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类.抽象类往往用来表征我们

面向对象开发中的七大设计原则和23种设计模式

一.面向对象开发中的七大设计原则 软件开发中最核心的思想就是"高内聚,低耦合",主要的目的也是为了方便后期的维护和变更.下面的设计原则也是依靠这个核心思想衍生出来的. 1.单一职责原则[SINGLE RESPONSIBILITY PRINCIPLE]:单一职责原则想表达的核心思想就是"高内聚",一个模块只完成一项功能.在面向对象设计中,一个类只应该负责一项职责,如果同时承担太多职责,就等于把这些职责耦合在了一起. 后面很可能因为某项职责的变更而导致其他职责的削弱或者

7种面向对象设计的强大之处

凭什么要用面向对象来编程,不用是否可以?今天我们通过讲这么几个设计原则来说明为什么要用面向对象,它的好处在哪里. 一.单一职责原则: 全称:“Single-Responsibility Principle”面向对象设计 说明:就一个类而言,应该只专注于做一件事和仅有一个引起它变化的原因.所谓职责,我们可以理解他为功能,就是设计的这个类功能应该只有一个,而不是两个或更多.也可以理解为引用变化的原因,当你发现有两个变化会要求我们修改这个类,那么你就要考虑撤分这个类了.因为职责是变化的一个轴线,当需求

面向对象设计原则

七大原则:开闭原则.里氏代换原则.依赖倒转原则.合成/聚合复用原则.迪米特法则.接口隔离原则,单一职责原则. 开闭原则是面向对象的可复用的基石.其他六种原则是手段和工具. 各规则详细(本部分为转载) http://kb.cnblogs.com/page/214010/ 正如牛顿三大定律在经典力学中的位置一样,“开-闭”原则(Open-Closed Principle)是面向对象的可复用设计(Object Oriented Design或OOD)的基石.其他设计原则(里氏代换原则.依赖倒转原则.合

面向对象设计的七大原则

在上一篇里我们谈了谈为何设计模式,那接下来我们再浅谈一下在面向对象设计中我们常常要遵循的一些原则. 这些原则是经过无数的前人总结出来的经验的结晶. 仅仅有遵循这些原则.你才有可能涉及出优秀的代码.今天我们要谈的原则有七大原则,即:单一职责.里氏替换.迪米特法则,依赖倒转,接口隔离,合成/聚合原则.开放-封闭 . 1.   开闭原则 定义:软件实体应当对扩展开放,对改动关闭.这句话说得有点专业.更通俗一点讲,也就是:软件系统中包括的各种组件,比如模块(Modules).类(Classes)以及功能

61条面向对象设计的经验原则

你不必严格遵守这些原则,违背它们也不会被处以宗教刑罚.但你应当把这些原则看成警铃,若违背了其中的一条,那么警铃就会响起. -----Arthur J.Riel (1)所有数据都应该隐藏在所在的类的内部.p13 (2)类的使用者必须依赖类的共有接口,但类不能依赖它的使用者.p15 (3)尽量减少类的协议中的消息.p16 (4)实现所有类都理解的最基本公有接口[例如,拷贝操作(深拷贝和浅拷贝).相等性判断.正确输出内容.从ASCII描述解析等等]. p16 (5)不要把实现细节(例如放置共用代码的私

Delphi面向对象设计的经验原则(61条)

(1)所有数据都应该隐藏在所在的类的内部. (2)类的使用者必须依赖类的共有接口,但类不能依赖它的使用者. (3)尽量减少类的协议中的消息. (4)实现所有类都理解的最基本公有接口[例如,拷贝操作(深拷贝和浅拷贝).相等性判断.正确输出内容.从ASCII描述解析等等]. (5)不要把实现细节(例如放置共用代码的私有函数)放到类的公有接口中. 如果类的两个方法有一段公共代码,那么就可以创建一个防止这些公共代码的私有函数. (6)不要以用户无法使用或不感兴趣的东西扰乱类的公有接口. (7)类之间应该

7大面向对象设计原则

面向对象设计原则 一.概述 针对软件的可维护性和可复用性,知名软件大师Robert C.Martin认为一个可维护性(Maintainability) 较低的软件设计,通常由于如下4个原因造成:过于僵硬(Rigidity) ,过于脆弱(Fragility) ,复用率低(Immobility) ,黏度过高(Viscosity) .软件工程和建模大师Peter Coad认为,一个好的系统设计应该具备如下三个性质:可扩展性(Extensibility) ,灵活性(Flexibility),可插入性(P