博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
面向对象和设计模式
阅读量:4127 次
发布时间:2019-05-25

本文共 1501 字,大约阅读时间需要 5 分钟。

概要

       面向对象的设计模式描述了面向对象设计过程中、特定场景下、类和相互通信的对象之间的常见的组织关系。面向对象的设计模式是面向对象方法论的演绎的结果,那么我们必然可以从多种模式中提炼出面向对象方法论的三个基点:封装、继承和多态。本文阐述了封装、继承、多态和设计模式之间的关系。

       关键词 设计模式,GOF,面向对象,封装,继承,多态

目录

1.     

当我们讨论面向对象的时候,很自然的地就会想到面向对象方法论的三个基点:封装、继承和多态。面向对象的编程语言用一种特定的语言机制实现了这三个基点。但是至今也并没有一本“大百科”来陈述这种方法论,或许是因为面向对象是一种应用哲学,很难在实践之外用文字来陈述。如果是在特定的应用场景中呢?那应该是可以的。

我们通过单个的应用场景来描述面向对象方法论的话,显然是不够的。因为方法论的基点就是普遍性。所以我们需要找出一个普遍性的东西来描述面向对象的方法论。这种普遍性的东西就是模式。

每一个模式都描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案。设计模式是特定的上下文中的一类问题的解决方式。在面向对象的世界里,设计模式可以从应用的角度很好地陈述面向对象的方法论。因此,两者的结合也就是成就了面向对象的设计模式化。

面向对象的设计模式描述了面向对象设计过程中、特定场景下、类和相互通信的对象之间的常见的组织关系。常见的模式有GOF23种设计模式,可以参考《设计模式:可复用面向对象的基础》。

那么面向对象的设计模式是如何地反应面向对象的方法论的呢?

面向对象的设计模式是面向对象方法论的演绎的结果,那么我们必然可以从多种模式中提炼出面向对象方法论的三个基点:封装、继承和多态。

         在不同的层面上理解,对象的定义各不相同:

1.         从概念层面上讲,对象是某种拥有责任的抽象

2.         从规格层面上讲,对象是一系列可以被其他对象使用的公共接口

3.         从语言实现层面上讲,对象封装了代码和数据

面向对象方法论中提到封装的时候,并没有带宾语,那么这个封装的意义就是不完整,从另外一个角度来说它是抽象的。因此面向对象的封装的意义在特定的场景中才是有具体意义的。从众多的设计模式我们不难看出,大多数的模式陈述了一个主题就是“封装变化”。这些变化可以是:

1.         对象的行为。

Factory Method模式、Abstact Factory模式、Builder模式、Prototype模式、Observer模式、Visitor模式、Strategy模式等

2.         /对象的内部结构。

Iterator模式、Bridge模式等

3.         对象之间的交互。

4.         效率

Flyweight模式等。

因为设计模式的核心主题是“封装变化”,故我们可以说当我们需要封装变化的时候就可以考虑使用设计模式化。

         面向对象中的继承可以是实现继承,也可以接口继承。实现继承耦合了两类对象之间的关系,在很多情况下会给造成程序的僵化、粘滞、脆弱等。因此我们需要接口继承,接口代表着抽象,而往往抽象的东西都是稳定的。使用接口继承不但可以解偶两类或多类对象之间的耦合关系,还可以让你的系统更稳定。所以很多设计模式阐述了一个主题就是,面向接口编程而不是实现编程。无论抽象的还是具体的类都应该依赖于抽象(接口),而不是实现。

Bridge模式、Composite模式、Strategy模式、Visitor模式等。

         利用设计模式在封装对象的行为时,最具有实现价值的就是多态。在以封装对象行为为基本主题的模式中,多态的作用在于它让你更直接地表达行为变化的概念。因此多态的意义更多的在于实现。封装变化才是本质。

 

转载地址:http://athpi.baihongyu.com/

你可能感兴趣的文章
文件上传时生成“日期+随机数”式文件名前缀的Java代码
查看>>
Java代码检查工具Checkstyle常见输出结果
查看>>
北京十大情人分手圣地
查看>>
Android自动关机代码
查看>>
Android中启动其他Activity并返回结果
查看>>
2009年33所高校被暂停或被限制招生
查看>>
GlassFish 部署及应用入门
查看>>
iWatch报错: Authorization request cancled
查看>>
iWatch报错: Authorizationsession time out
查看>>
如何运行从网上下载的iWatch项目详细步骤.
查看>>
X-code7 beta error: warning: Is a directory
查看>>
Error: An App ID with identifier "*****" is not avaliable. Please enter a different string.
查看>>
X-code beta 开发iWatch项目,运行没有错误,但是某些操作一点就崩,而且找不错误的原因场景一
查看>>
Xcode 报错: Extra argument in call
查看>>
iTunes Connect 上传APP报错: Communication error. please use diagnostic mode to check connectivity.
查看>>
#import <Cocoa/Cocoa.h> 报错 Lexical or Preprocessor Issue 'Cocoa/Cocoa.h' file not found
查看>>
`MQTTClient (~> 0.2.6)` required by `Podfile`
查看>>
X-Code 报错 ld: library not found for -lAFNetworking
查看>>
Bitcode
查看>>
If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
查看>>