• 设计模式学习


    策略模式:

       策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。

    OO原则:

    1.   封装变化
    2.   多用组合,少用继承
    3.   针对接口编程,不针对实现实现编程

    解释一下: 这里的算法指的就是 行为,就是指对象的方法。

      举个例子吧:比如一个叫鸭子的抽象类,它有一个方法(行为)叫 飞行(fly()), 它有很多的子类(如:红头鸭、橡皮鸭、诱饵鸭等),每一种鸭子的飞行方式都不一样,有的能飞(flyWithWing()),有的和火箭一样飞(flyWithRocket()),有的不会飞(flyNoWay())。

      这个时候,我们可以将这个多变的方法(行为)从鸭子类中抽出来,单独建立一个抽象类专门用来处理 飞行 的方式。如下:

    // 将 飞行 这个方法,抽象成一个协议
    protocol FlyBehaviorInterface {
        func fly()
    }
    
    // 实例化一个对象,继承 飞行 的那个协议,并 以一种算法 实现它
    class FlyWithWings: NSObject, FlyBehaviorInterface {
        func fly() {
            println("I'm fly With Wing");
        }
    }
    
    // 实例化一个对象,继承 飞行 的那个协议,并 以另一种算法 实现它
    class FlyNoWay: FlyBehaviorInterface {
        func fly() {
            println("I'm sorry, I can't fly");
        }
    }

      在鸭子类的实现:(父类中调用协议的接口即可,子类不用实现)

    class Duck: NSObject {
        
        // 定义 一个 FlyBehaviorInterface 的对象
        var flyBehavior: FlyBehaviorInterface?
        
        // 在 performFly() 方法中实现 FlyBehaviorInterface 协议的飞行方法
        func performFly() {
            flyBehavior?.fly()
        }
        
        func displayDuck() { }
    }

      

      在 调用子类 的时候,来实例化 飞行方式

    var mallardDuck: Duck = MallardDuck()
    // 实例化 飞行方式 (即选择一种 飞行 的方法【行为、算法】)
    mallardDuck.flyBehavior = FlyWithWings()
    // 调用 父类中的 飞行方法
    mallardDuck.performFly()
  • 相关阅读:
    电子设计基础——有效值检波技术
    电子设计基础——电源的各项指标及测量方法
    电子设计基础——电源的各项指标及测量方法
    计算机网络——IP地址与MAC地址
    计算机网络——IP地址与MAC地址
    LDC1000学习资料
    移动端制作公共样式reset
    单行、多行溢出省略
    垂直居中常用布局
    移动端rem布局必要的meta和script
  • 原文地址:https://www.cnblogs.com/ziyeSky/p/4427274.html
Copyright © 2020-2023  润新知