`
kinkding
  • 浏览: 147908 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

设计模式-学习

    博客分类:
  • JAVA
阅读更多

设计模式主要包含三个部分:场景(上下文)、问题、解决方案。


设计模式包含五个要素:名称、环境、问题、解决方案、效果。


模式可以分为创建型、结构型、行为型三种。


可扩展性是由开闭 原则、里氏代换原则、依赖倒转原则和组合 /聚合复用原则所保证


几个原则的分析:
  1. 开闭原则:“Software entities should be open for extension,but closed for modification”。对扩展开放、对修改关闭。目标是做到不修改现有代码的基础上,扩展系统的功能。实现开闭原则的关键是“抽象”,对系统的行为进行尽可能的抽象,使得抽象层可以对应一个或多个具体的行为实现。
  2. 里氏代换原则(LSP):“Subtypes must be substitutable for their base types”,也即子类必须可替换他们的基类,替换之后,系统的功能没有发生改变。该原则是研究继承的原则:如果实现的继承关系不满足该原则,则该关系不成立。相关的实例有:正方形不是长方形,鸵鸟不是鸟等。对第一个实例,可考虑将设置长度、宽度的方法合并成一个方法。对于第一个实例,可考虑改进鸟类的设计:可参考Head Frist design pattern。
  3. 依赖倒置原则:目的在改变传统的过程化设计方法中,高层次模块依赖低层次模块,抽象层依赖于具体层的方式。依赖倒置目的即将该方式进行倒转。抽象不应该依赖于细节,也即“需要针对接口编程”。接口是实现插件化的关键,提升系统的灵活性。
  4. 组合聚合复用原则:“ Favor object composition over class inheritance”,尽量使用组合聚合,而不是继承。基于面向对象编程,依赖于抽象而不是具体的原则,假定类A的功能在新的B类中需要使用,可选择两种方式:1)使得A成为B的一部分(组合聚合方式);2)使得B继承于A。如果A本身没有进行相应的抽象,则方法2就带来了依赖和耦合的问题。

单例模式:其典型实现有第一次调用实例化和类加载就实例化两种差别。

装饰模式:动态给对象添加一些额外的职责,例如JAVA IO API 就是采用了该模式。

 

适配器模式:对类的接口进行变换,使得原本不匹配的两者之间能一起工作。在生产系统中,广泛采用的工作流相关的entryadapter,forwardadapter等。

模板模式:设计一个抽象类,将部分逻辑以具体方法的形式实现,同时申明一些抽象方法迫使子类实现剩余的逻辑。这样,子类可以替换父类的可变部分,但改变不了模板方法所代表的顶级逻辑。

门面模式:外部与子系统的通信,必须通过一个统一的门面对象进行。这样可以简化子系统的接口同时提升子系统的独立性和可

代理模式:给原始对象提供一个代理,由代理类来控制对原对象的引用。(代理和门面的差别是:代理目的是控制原对象的引用,门面目的是提供统一的接口,一般来说,门面会需要统筹多个功能对象)。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics