博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JS面向对象的七大基本原则(里氏替换/依赖倒置)
阅读量:5052 次
发布时间:2019-06-12

本文共 2139 字,大约阅读时间需要 7 分钟。

里氏替换及依赖倒置

class Zoo {    constructor () {            }    open () {        //我要提前准备好多小动物,并设置好每个小动物的名字及它们的表演节目        let cat = new Cat('猫')        console.log(cat.catName + cat.canJump());        let dog = new Dog('狗')        console.log(dog.dogName + dog.canSing());    }}class Cat {    constructor (name) {        this.catName = name;    }    canJump () {        return '能跳'    }}class Dog {    constructor (name) {        this.dogName = name;    }    canSing () {        return '能唱'    }}let zoo  = new Zoo();zoo.open();

每个小动物都是那么的独特,我要记住他们所有的名字和行为,如果他们的名字和行为发生变化的时候,我就要去修改open方法, 如果来的新的小动物,我还得修改open。

如果我能发出口令“name”,他们就能爆出各自的名字,口令“show” 他们就能表演多好啊, 我要去训练他们,

class Zoo {    constructor () {            }    open () {        //我要提前准备好多小动物,并设置好每个小动物的名字及它们的表演节目        let cat = new Cat('猫')        console.log(cat.name + cat.show());        let dog = new Dog('狗')        console.log(dog.name + dog.show());    }}class Cat {    constructor (name) {        this.name = name;    }    show () {        return '能跳'    }}class Dog {    constructor (name) {        this.name = name;    }    show () {        return '能唱'    }}let zoo  = new Zoo();zoo.open();

嗯, 好多了, 我不用记住它们独特的名字和行为了,我为他们定义了统一的标准,要求他们听到name就返回名字,听到show就表演行为

我总结出了一个规律,所有带name属性,有show方法的动物都能来动物园,所以我只需要为所有的动物指定一个标准就行了,然后让所有的动物都能遵守它。

class Zoo {    constructor () {            }    open (...animals) {        //我要提前准备好多小动物,并设置好每个小动物的名字及它们的表演节目        for(let animal of animals) {            if (animal instanceof Animal) {                console.log(animal.name, animal.show())            } else {                console.log('你不听我的话,我不要你')            }        }    }}class Animal {    constructor (name) {        this.name = name;    }    show () {    }}class Cat extends Animal{    constructor (name) {        super(name)    }    show () {        return '能跳'    }}class Dog extends Animal{    constructor (name) {        super(name)    }    show () {        return '能唱'    }}let zoo  = new Zoo();zoo.open(new Cat('猫'), new Dog('狗'));

我指定的标准就是Animal, 它就是一个抽象, 我在动物园的open中不在依赖Cat/Dog而是依赖Animal,这就是依赖倒置,而Cat/Dog对于show方法的实现就是里氏替换

 

转载于:https://www.cnblogs.com/pandapeter/p/10441365.html

你可能感兴趣的文章
软件目录结构规范
查看>>
Windbg调试Sql Server 进程
查看>>
linux调度器系列
查看>>
mysqladmin
查看>>
解决 No Entity Framework provider found for the ADO.NET provider
查看>>
SVN服务器搭建和使用(三)(转载)
查看>>
Android 自定义View (三) 圆环交替 等待效果
查看>>
设置虚拟机虚拟机中fedora上网配置-bridge连接方式(图解)
查看>>
HEVC播放器出炉,迅雷看看支持H.265
查看>>
[置顶] Android仿人人客户端(v5.7.1)——人人授权访问界面
查看>>
Eclipse 调试的时候Tomcat报错启动不了
查看>>
【安卓5】高级控件——拖动条SeekBar
查看>>
ES6内置方法find 和 filter的区别在哪
查看>>
Android入门之文件系统操作(二)文件操作相关指令
查看>>
Android实现 ScrollView + ListView无滚动条滚动
查看>>
Swift 中的指针使用
查看>>
Swift - 使用闭包筛选过滤数据元素
查看>>
alue of type java.lang.String cannot be converted to JSONObject
查看>>
搜索引擎选择: Elasticsearch与Solr
查看>>
JAVA设计模式之简单工厂模式与工厂方法模式
查看>>