设计模式-2-LSP里氏替换原则

    xiaoxiao2021-03-25  64

    //: Playground - noun: a place where people can play

    import UIKit

    var str = "Hello, playground"

    /*

     里氏替换原则LSP(Liskov Substitutin Principle)

     只要父类能出现的地方,子类就可以出现,而且替换为子类也不会产生任何错误异常,使用者不用知道是父类还是子类

     

     

     

     

     继承

     优点:代码共享,减少创建类的工作量,每个子类都拥有父类的方法和属性

          提高代码的重用性

          子类形似父类,异于父类

          提高代码的可拓展性

          提高项目开放性

     缺点:是侵入性的,只要继承,一定拥有

          降低代码灵活性,必须拥有父类属性方法,子类多了约束

          增强了耦合性。父类改变,必须考虑子类

     

     

     

    例子,1例中的传入 Protrol的实现类

     */

    //子类的前置条件必须与父类中被复写的方法的前置条件相同或更宽松

    class Father {

        func doSomeThing(dic:NSDictionary) -> [AnyObject]{

            debugPrint("父类执行")

            return dic.allValues

        }

        

    }

    class Son: Father{

        ///参数不同,重载

         func doSomeThing(dic: NSMutableDictionary) -> [AnyObject] {

            debugPrint("子类执行")

            return dic.allValues

        }

        ///重写

    //    override func doSomeThing(dic: NSDictionary) -> [AnyObject] {

    //        debugPrint("子类重写")

    //        return dic.allValues

    //    }

        

    }

    class Test {

        

        func test1(){

            let mudic:NSMutableDictionary = NSMutableDictionary()

            Son().doSomeThing(mudic)//子类执行

            Father().doSomeThing(mudic)//父类执行

        }

        

        func test2(){

                    let dic:NSDictionary = NSDictionary()

                    Son().doSomeThing(dic)//父类执行  --》子类重写                        override func doSomeThing

                    Father().doSomeThing(dic)//父类执行

        }

        

    }

    let test = Test()

    //    test.test1()

        test.test2()

    转载请注明原文地址: https://ju.6miu.com/read-33255.html

    最新回复(0)