`
ldjsyl
  • 浏览: 195071 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

设计模式-面向对象概念

阅读更多
早就听说GOF的《设计模式》是OOP(面向对象程序设计)程序员都必备的参考书之一,它是所有面向对象语言(C++ Java C#)的基础。我接触Java也有段时间了,可是也一直停留在语言层次,对Java中接口或抽象类理解并不是太深。在看前辈们写的代码的时候,感觉差距还是不小,他们写的代码里处处体现设计模式的思想。

一、什么是抽象类
《设计模式》中对于抽象类是这样定义的:抽象类的这样目的是为它的子类定义公共接口,不能被实例化。
public abstract void noAction(); 

此方法只有申明而没有方法体,并且void前面出现abstract关键字,我们将此方法称为抽象方法,并且此类方法前冠以abstract关键字。包含抽象方法的类叫做“抽象类”。如果一个类包含一个或多个抽象方法,该类必须被限定为抽象的。
和接口不同的是,抽象类可以有非抽象的方法,所以抽象类中的抽象方法必须冠以abstract关键字,而接口则不需要必须,因为接口中,所有方法都是抽象的。另外,抽象类在Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。
示例:
abstract class Instrment {
private int i;//在子类中重新定义,也可以重新赋值
public abstract void play(Note n);
public String what() { return ""; } //接口中不可以这样定义
}


二、什么是接口
《设计模式》中对于接口是这样定义的:对象所定义的所有操作型构的集合被称为该对象的接口。对象接口描述了该对象所能接受的全部请求的集合,任何匹配对象接口中型构的请求都可以发送给该对象。
接口中的所有变量都是静态的(static)和最终的(final)。若在程序中没有明确标示,编译器会自动为我们添加这两个关键字。
而且在接口中所有的方法都是public,如果没有标上public,编译器会自动冠以public关键字。另外,接口中的方法不能使用private与protected关键字修饰。
示例:
interface Instrument {
int VALUE = 5; //public ,static and final,必须给其初值
void play(Note n); //Automatically public and abstract
}


三、面向对象设计原则:
1、针对接口编程,而不是针对实现编程(依赖倒转原则)
在面向对象设计中,应尽量针对接口编程,而非实现类。这样,更换子类不会影响调用它方法的代码,要让各个类尽可能少的跟别人联系,这样,扩展性和维护性才能提高。所以不将变量声明为某个特定的具体类的实例对象,而是让它遵从抽象类所定义的接口。
2、优先使用对象组合,而不是类继承
类继承,如果继承下来的实现不适合解决新的问题,则父类必须重写或者说父类重写了,继承该父类的各个类都可能需要重写,一种解决方法就是尽量继承抽象类。对象组合就是在一个类中引用其他类,对象组合则可以避免上述类继承遇到的问题,因为组合要求对象遵守彼此的接口约定。对象的实现是基于接口写的,所以实现上存在较少的依赖关系。
3、抽象类
好的继承关系中,只有叶节点是具体类,其他节点应该都是抽象类,也就是说具体类是不被继承的,所以说将尽可能多的共同代码放到抽象类中。
4、"开-闭"原则
就是说模块应对扩展是开放的,对修改是封闭的。换句话说,在极端的情况下,你不需要修改现有的代码,新功能通过子类,重载或通过代理来委托现有代码来完成。这样会防止你向现存的代码中引入bug,因为现存的代码不会被改动就不会产生新的问题。
5、里氏代换原则
里氏代换原则是由"Barbara Liskov"提出的。如果调用的是父类的话,那么换成子类也完全可以运行。这个就是为什么实现接口的类中必须要实现接口中的所有方法,否则Java解释器不能正常解释的原因。
6、接口隔离原则
定制服务的例子,每一个接口应该是一种角色,不多不少,不干不该干的事,该干的事都要干
分享到:
评论

相关推荐

    漫谈设计模式-从面向对象开始

    在本文档中,我们将深入探讨设计模式及其在面向对象编程中的应用。设计模式是软件工程中的一套被广泛认可的最佳实践,它们是一些在特定上下文中反复出现的问题的解决方案。了解和应用设计模式可以帮助开发者写出更加...

    数据结构与算法-面向对象的C++设计模式

    - 讨论了访问器、迭代器、存储表示等关键的面向对象概念。 - 涉及到了集合的抽象和搜索容器的设计。 **第6章 栈、队列及双端队列** - 对栈的实现进行了分类讨论,包括数组和链表的不同实现方式。 - 阐述了队列的...

    c#开发模式-面向对象

    ### C#开发模式—面向对象:深入探讨Strategy策略设计模式 #### 一、引言 在软件开发领域,面向对象编程(OOP)是一种广泛采用的方法论,它通过将数据和处理数据的方法组织在一起,形成对象,来提高代码的可重用性、...

    设计模式-可复用面向对象软件的基础.rar

    《设计模式-可复用面向对象软件的基础》这本书深入探讨了这一主题,旨在帮助开发者理解和掌握这些模式,从而构建更加健壮和高效的软件系统。 面向对象编程(Object-Oriented Programming, OOP)是一种编程范式,它...

    设计模式--可复用面向对象软件的基础

    本书共分为六个章节,详细介绍了面向对象设计模式的基本概念及其应用: - **第一章 引言**:首先定义了设计模式的概念,接着通过Smalltalk MVC框架中的具体例子来说明设计模式的应用,最后详细阐述了设计模式的描述...

    23种面向对象设计模式

    面向对象设计模式是软件开发中的一种重要思想,它通过总结和提炼在软件设计过程中常见的问题和解决方案,形成了可复用的设计规范。标题提到的“23种面向对象设计模式”涵盖了设计模式的主要分类,这些模式在Java、...

    设计模式-可复用面向对象软件的基础(中英文+src code)

    《设计模式 - 可复用面向对象软件的基础》是一本经典著作,由“Gang of Four”(GoF)所著,书中详细阐述了23种设计模式,对理解与应用设计模式有着深远的影响。 首先,我们要理解设计模式的核心理念:它们不是预...

    命令模式-面向对象作业东软

    命令模式是一种设计模式,它是面向对象编程中的一种行为模式,主要用来封装操作请求以及相关的执行逻辑,使得请求发送者和接收者解耦。在“命令模式-面向对象作业东软”这个主题中,我们将深入探讨命令模式的核心...

    UML和模式应用-面向对象分析与设计导论

    在学习《UML和模式应用-面向对象分析与设计导论》时,读者将不仅掌握UML的使用,还能理解如何结合设计模式进行高效的面向对象设计。这将为读者在实际软件开发中解决问题和提升设计质量打下坚实基础。通过阅读提供的...

    数据结构与算法--面向对象的C++设计

    包含了类、对象、空对象(Null Object)、代理对象、迭代器等设计模式,这些设计模式是面向对象设计中的核心概念。 第6章栈、队列及双端队列: 最后,本章可能覆盖了栈、队列以及双端队列等基本数据结构的面向对象...

    设计模式-可复用面向对象软件的基础

    《设计模式-可复用面向对象软件的基础》这本书是面向对象编程领域中的一部经典之作。设计模式,作为软件工程中的重要概念,是解决常见问题的成熟解决方案的模板,它在实践中被反复验证并广泛接受。这本书深入浅出地...

    设计模式 - 可复用面向对象软件的基础(高清版)

    设计模式是软件工程中的一种重要概念,它代表了在特定情境下解决常见问题的最佳实践。这些模式来源于经验,经过时间的验证,为开发者提供了一种标准化的方法来处理面向对象编程中的复杂性和可维护性问题。《设计模式...

    《软件工程-面向对象和传统的方法》(第7版)MSG基金实例实现

    在C++版本中,你可以期待看到类的定义、封装、继承和多态等面向对象概念的使用。C++允许更底层的控制,例如模板、指针操作和运算符重载,这些可能会在实现中体现出来。通过对C++代码的学习,读者可以理解如何在实际...

    设计模式:可复用面向对象软件的基础--详细书签版

     本书结合设计实例从面向对象的设计中精选出23个设计模式,总结了面向对象设计中最有价值的经验,并且用简洁可复用的形式表达出来。本书分类描述了一组设计良好、表达清楚的软件设计模式,这些模式在实用环境下特别...

    设计模式可复用面向对象软件的基础 源码

    "设计模式可复用面向对象软件的基础"这一主题强调了设计模式在创建可维护、可扩展的面向对象软件中的核心作用。源码实现则为我们提供了实际应用这些模式的实例,帮助我们更好地理解和掌握它们。 在《设计模式:可...

Global site tag (gtag.js) - Google Analytics