`

设计模式之前传:OO设计原则

    博客分类:
  • OOAD
阅读更多

原则1:最小化类及其属性/方法的访问权限。(Minimize The Accessibility of Classes and Members)

通过封装,抽象实现信息的隐藏。尽量声明属性为私有。之通过相应的共有方法去访问这些属性。

 

 

原则2:组合由于继承。(Favor Composition Over Inheritance)

 

除了继承之外,我们还可以通过将现有的对象组合起来实现新的功能来达到重用的目的。新的功能可以通过代理的方式来实现。有些时候我们也可以用聚合(aggregation)的方式来实现。

 

使用继承的问题:

 

  • 破坏了封装。子类必须知道父类的实现细节才能够使用或重写父类的方法。(“白盒”方式的重用)
  • 如果父类的实现细节被改变,则子类必须改变。
  • 子类中从父类继承过来的实现细节不能在运行时被改变。
  • 滥用继承会导致非常复杂的继承树结构。从而影响系统的重用性。

使用组合的优点:

  • 被包含的对象只能通过其包含对象来访问,这样就实现了“黑盒”方式的重用。
  • 减少了很多实现时的依赖。例如客户端不需要依赖被包含对象。
  • 每一个类可以只关注一个简单的任务。
  • 对象的组合可以在运行时动态地来定义。

范例



如上图所示,在Java AWT/Swing的实现中,任何容器(Container)都包含一个布局管理器(Layout),实际添加组件的操作由布局管理器来实现。而容器类只是代理了布局管理器的某些方法(比如:add, remove)。这样容器类就可以轻松地更换布局管理器了。

 

原则3:依赖倒置原则(Dependency Inversion Principle)

这个原则也是常说的"面向接口而非面向其实现编程"。这样在将来任何该接口的实现类都可以不做任何修改地工作在客户端。

 

 

原则4:开闭原则(Open-Close Principle)

一旦一个类已经交付使用,该类可以允许继承但不应该允许直接的修改。但是在一个系统的实现中不可能总是遵循OCP原则,但应尽量地去遵守。

 

 

原则5:Liskov替换原则(LSP)

子类型必须在任何时候都能替换父类型。这样的好处就是客户类只需要面向父类或接口编程就可以了,而不需要关心任何可能的子类。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 大小: 81.6 KB
0
0
分享到:
评论

相关推荐

    OO中对于23种设计模式的整理

    OO中对于23种设计模式的整理OO中对于23种设计模式的整理

    head first 设计模式

    千万不要轻视这些OO原则,因为每个设计模式背后都包含了几个OO原则的概念。很多时候,在设计时有两难的情况,这时候我们必须回归到OO原则,以方便判断取舍。可以这么说:OO原则是我们的目标,而设计模式是我们的做法...

    Head First 设计模式(中文完整版+附书源码)part1

    千万不要轻视这些OO原则,因为每个设计模式背后都包含了几个OO原则的概念。很多时候,在设计时有两难的情况,这时候我们必须回归到OO原则,以方便判断取舍。可以这么说:OO原则是我们的目标,而设计模式是我们的做法...

    设计模式课件大全

    设计模式07-组合模式、装饰模式 设计模式09-外观模式、享元模式 设计模式10-代理模式、结构型模式大复习 设计模式11-行为模式-责任链、命令模式 设计模式12-解释器模式 设计模式13-迭代器模式 设计模式14-中介者模式...

    设计模式资料汇总

    .pdf JAVA设计模式.chm 软件设计的七大原则.doc 设计之道.pdf C#设计模式分析.doc C#设计模式-微软.rar 从追MM谈Java的23种设计模式.txt 什么是OO思想.txt 探寻软件的永恒之道.txt 你还...

    SAP ABAP开发学习——第10课:OOALV(视频教程)

    SAP ABAP开发学习——第10课:OOALV(视频教程) 1.SAP ABAP开发入门学习 2.含视频教程学习、PPT、作业 3.视频非常清晰

    设计模式——可复用的OO软件

    设计模式——可复用的OO软件

    面向对象设计原则和设计模式的概念

    面向对象设计原则和设计模式的概念,讲述面向对象的设计模式

    OO设计原则 -- OO设计的 DIP依赖倒置原则

    依赖倒置原则的2个重要方针 1.高层模块不应该依赖于低层模块,二者都应该依赖于抽象 2.抽象不应该依赖于细节,细节应该依赖于抽象

    OO设计原则-里氏替换原则

    OO设计原则 --OO设计的LSP里氏替换原则 ,所以使用基类代码的地方,用派生类代码替换后,能够正确的执行动作处理。 ◇ 换句话说,如果派生类替换了基类后,不能够正确执行动作,那么他们的继承关系就应该废除。

    Head First 设计模式(中文版)

    千万不要轻视这些OO原则,因为每个设计模式背后都包含了几个OO原则的概念。很多时候,在设计时有两难的情况,这时候我们必须回归到OO原则,以方便判断取舍。可以这么说:OO原则是我们的目标,而设计模式是我们的做法...

    OO设计原则总结

    关于设计模式的一些总结介绍!

    23个设计模式标准OO结构

    23个设计模式标准OO结构,还有code和图

    java oo 设计原则

    java oo 设计原则

    OO与设计模式

    软件工程软考认证,Java与设计模式,下午必考题,24种设计模式

    面向对象的思想与设计模式

    包括: oo与设计模式的原则,目标 简单工厂模式 工厂方法模式 抽象工厂模式

    面向对象编程,OO设计的五大原则

    面向对象,编程,OO设计的五大原则 OO的五大原则是指SRP、OCP、LSP、DIP、ISP。

    敏捷软件开发:原则、模式与实践.pdf

    敏捷软件开发:原则、模式与实践.pdf 学习敏捷开发,设计模式,OO设计原则,经典巨作

    设计模式精解-GoF 23种设计模式解析附C++实现源码

    懂了设计模式,你就懂了面向对象分析和设计(OOA/D)的精要。...这也是我们软件设计所准求的,因此无论是OO中的封装、继承、多态,还是我们的设计模式的原则和实例都是在为了这两个目标努力着、贡献着。

    Head.First设计模式_PDF.part1

    千万不要轻视这些OO原则,因为每个设计模式背后都包含了几个OO原则的概念。很多时候,在设计时有两难的情况,这时候我们必须回归到OO原则,以方便判断取舍。可以这么说:OO原则是我们的目标,而设计模式是我们的做法...

Global site tag (gtag.js) - Google Analytics