zoukankan      html  css  js  c++  java
  • Head First 设计模式之入门

    开启自己的设计模式学习。先来用一个老套的鸭子的例子做介绍,来初涉设计模式领域。

    Duck具有功能:

    但继承Duck类的子类在fly和quack方法上,会有改变。

    修改后,最终效果为:

    设计原则:

    (1)从基类找出应用中可能需要变化之处,把它们独立出来,不要把它们和不需要变化的代码混在一起。 (把这些需要改变的行为用分别创建接口来表示)

    (2)针对接口编程,而不是针对实现编程。    (创建子类实现接口,将具体实现放在这些子类中;而不是直接定义在Duck类中,或者Duck的子类中)

    一、分析:
    
    "针对接口编程"真正含义是"针对超类型编程"。针对接口编程,关键在于多态。
    
    例子:    针对实现编程:Dog d = new Dog(); d.bark();  //变量d为Dog类型,会造成我们必须针对具体实现编程。
    
              针对接口编程:Animal animal = new Dog(); animal.makeSound();  //我们知道对象是Dog,但我们现在利用animal进行多态的调用。
    
    我们不需要知道实际的子类型是什么,我们只关心他知道如何正确地进行makeSound就行了。
    
     
    
    二、比较
    
    以前的做法是:行为来自Duck超类的具体实现;或者是继承某个接口并由子类自己实现。 这两种做法都是依赖于"实现"。
    
    新的设计方法:Duck的子类使用接口(FlyBehavior/QuackBehavior)所表示的行为。所以实际的"实现"不会被绑定在子类中。
    换句话说,特定的行为编写在实现了FlyBehavior/QuackBehavior的类中。

    (3)favor composition over inheritance.(多用组合,少用继承)

    (4)为了交互对象之间的松耦合设计而努力

  • 相关阅读:
    项目UML设计(团队)
    项目选题报告答辩总结
    UIGestureRecognizer 手势
    CGAffineTransform 图像处理类
    block 应用说明
    Runtime-iOS运行时应用篇
    runtime之归档和解档
    Runloop
    加锁处理
    2017年浙江工业大学之江学院程序设计竞赛决赛 I: qwb VS 去污棒(可持久化Trie+离线)
  • 原文地址:https://www.cnblogs.com/chenbin7/p/2774909.html
Copyright © 2011-2022 走看看