OOP 面向对象   七大原则 (二)

上一篇写到了前四个原则,这一篇继续~~

  接口隔离:客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。

  又是一句大白话~就是说接口尽量的要细化,接口中的方法也要尽量的少

  

/**
* oop 接口隔离原则实现
* @author gongliying
* @date 2019-06-15
*/
achieve(){
class cosmetics {
constructor(name) {
this.name = name
}
color() {
console.log(this.name, "颜色")
}
efficacy() {
console.log(this.name, "滋润保湿")
}
size() {
console.log(this.name, "粗细")
}
}
class lipstick extends cosmetics {}
class eyeliner extends cosmetics {} let kouhong = new lipstick("口红")
kouhong.color() // 口红 颜色
kouhong.efficacy()                // 口红 滋润保湿
kouhong.size()                  // 口红 粗细 let yanying = new eyeliner("眼影")
yanying.color() //眼影 颜色
yanying.efficacy()                //眼影 滋润保湿
yanying.size()                  // 眼影 粗细 },

  我这样的确是都实现了,但是有没有感觉特别的emmmm冗余,而且逻辑上好像还是有点不对???   因为口红并没有粗细啊 眼影我也还没有听过有滋润保湿的啊,这样的话有一些方法在继承的时候就显得有点多余了,官方的话就是--客户端不应该依赖他不需要的接口,

  更改如下

    

/**
* oop 接口隔离原则实现
* @author gongliying
* @date 2019-06-15
*/
achieve(){
class cosmetics {
constructor(name) {
this.name = name
}
color() {
console.log(this.name, "颜色")
}
}
class lipstick extends cosmetics {
efficacy() {
console.log(this.name, "滋润保湿")
}
}
class eyeliner extends cosmetics {
size() {
console.log(this.name, "粗细")
}
} let kouhong = new lipstick("口红")
kouhong.color()       //口红 颜色
kouhong.efficacy()           //口红 滋润保湿 let yanying = new eyeliner("眼影")
yanying.color() //眼影 颜色
yanying.size()              //眼影 粗细 },

  这样看起来是不是很好了,拥有了共同的方法,也有自己的方法,将接口细化,提高灵活性(官话),不依赖不需要的接口,这就是接口分离

  迪米特原则:迪米特原则又叫最少知识原则,是一个类应该对其他的类有最少的了解,因为当一个类发生改变的时候,另一个以来的类也会发生相应的改变,两个类之间依赖程度越大,耦合性越高,改变的类越多,相依赖的类影响更大,为了解决这种情况,提出了迪米特法则,减少相应类的依赖

  以中介者模式为例,当然还是我的化妆品~~~

  

/**
* oop 接口隔离原则实现
* @author gongliying
* @date 2019-06-15
*/
achieve(){
class cosmetics{
daub(){
console.log('抹了什么?')
}
}
class kouhong extends cosmetics{
go(){
return "抹了口红"
}
}
class yanying extends cosmetics{
go(){
return "抹了眼影"
}
}
class people {
constructor(name) {
this.name = name
}
gotoEat(mo) {
console.log(this.name, mo.go())
}
}
kouhong = new kouhong
yanying = new yanying
let gong = new people('宫') kouhong.daub() //抹了什么?
gong.gotoEat(kouhong) //宫 抹了口红
gong.gotoEat(yanying) //宫 抹了眼影
},

  组合聚合复用原则:组合/聚合复用原则经常又叫做合成复用原则。该原则就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分:新的对象通过向这些对象的委派达到复用已有功能的目的。这里提示!!!要尽量的使用组合聚和原则,尽量不要使用继承,因为在子类继承父类的时候,父类把细节全部暴露给了子类,并且在父类发生改变的时候,子类也会相应发生改变,不利于类的扩展,耦合性比较高,而组合聚和原则他们的新对象与已有对象的emmmmm‘沟通’都是通过抽象类进行呢,能够避免继承的缺点,并且符合单一原则

  什么是合成?合成表示一种强的拥有关系,体现了严格的部分和整体的关系,部分和整体的生命周期一样,打个比方:人有两个胳膊,胳膊和人就是部分和整体的关系,人去世了,那么胳膊也就没用了,也就是说胳膊和人的生命周期是相同的

    什么是聚合?聚合表示一种弱的拥有关系,体现的是A对象可以包含B对象,但是B对象并不是A对象的一部分,打个比方:人是群居动物,所以每个人属于一个人群,一个人群可以有多个人,所以人群和人是聚合的关系


  

OOP 面向对象 七大原则 (二)的更多相关文章

  1. OOP 面向对象 七大原则 (一)

    OOP 面向对象   七大原则 (一) 大家众所周知,面向对象有三大特征继承封装多态的同时,还具有这七大原则,三大特征上一篇已经详细说明,这一篇就为大家详解一下七大原则: 单一职责原则,开闭原则,里氏 ...

  2. OOP面向对象程序设计原则

    OOP面向对象程序设计原则 开闭原则(Open Close Principle) 对扩展开放,对修改关闭 里氏代换原则(Liskov Substitution Principle) 继承必须确保超累所 ...

  3. OOP编程七大原则

    OCP(Open-Closed Principle),开放封闭原则:软件实体应该扩展开放.修改封闭.实现:合理划分构件,一种可变性不应当散落在代码的很多角落里,而应当被封装到一个对象里:一种可变性不应 ...

  4. 面向对象设计原则二:开闭原则(OCP)

    开闭原则(OCP)定义:对扩展开发,对修改关闭.好处:      适应性和灵活性.      稳定性和延续性.      可复用性与可维护性. 解释说明:开闭原则指的是两方面:对功能扩展开发,对修改进 ...

  5. 【设计模式系列】之OO面向对象设计七大原则

    1  概述 本章叙述面向向对象设计的七大原则,七大原则分为:单一职责原则.开闭原则.里氏替换原则.依赖倒置原则.接口隔离原则.合成/聚合复用原则.迪米特法则. 2  七大OO面向对象设计 2.1 单一 ...

  6. C#面向对象设计的七大原则

    本文我们要谈的七大原则,即:单一职责,里氏替换,迪米特法则,依赖倒转,接口隔离,合成/聚合原则,开放-封闭 . 1.   开闭原则(Open-Closed Principle, OCP) 定义:软件实 ...

  7. (转) 面向对象设计原则(二):开放-封闭原则(OCP)

    原文:https://blog.csdn.net/tjiyu/article/details/57079927 面向对象设计原则(二):开放-封闭原则(OCP) 开放-封闭原则(Open-closed ...

  8. 设计模式学习(二):面向对象设计原则与UML类图

    一.UML类图和面向对象设计原则简介 在学习设计模式之前,需要找我一些预备知识,主要包括UML类图和面向对象设计原则. UML类图可用于描述每一个设计模式的结构以及对模式实例进行说明,而模式结构又是设 ...

  9. Java 程序员应在2019年学习的10条面向对象(OOP)设计原则

    面向对象的设计原则 是 OOP 编程的核心,但是我看到大多数 Java 程序员都在追求诸如 Singleton 模式,Decorator 模式或 O​​bserver 模式之类的设计模式,而对学习面向 ...

随机推荐

  1. LINQ体验(8)——LINQ to SQL语句之Union All/Union/Intersect和Top/Bottom和Paging和SqlMethods

    我们继续解说LINQ to SQL语句,这篇我们来讨论Union All/Union/Intersect操作和Top/Bottom操作和Paging操作和SqlMethods操作 . Union Al ...

  2. HDU 1429--胜利大逃亡(续)【BFS && 状态压缩】

    胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total S ...

  3. leetcode_num179_Largest Number

    Given a list of non negative integers, arrange them such that they form the largest number. For exam ...

  4. XTU OJ 1207 Welcome to XTCPC (字符串签到题)

    Problem Description Welcome to XTCPC! XTCPC start today, you are going to choose a slogan to celebra ...

  5. mysql查询count

    Every derived table must have its own alias 每个派生出来的表都必须有一个自己的别名 一般在多表查询时,会出现此错误. 因为,进行嵌套查询的时候子查询出来的的 ...

  6. B1968 [Ahoi2005]COMMON 约数研究 数论

    大水题,一分钟就做完了...直接枚举1~n就行了,然后在n中判断出现多少次. 题干: Description Input 只有一行一个整数 N(0 < N < 1000000). Outp ...

  7. Mysql数据类型(二)

    字符类型 #官网:https://dev.mysql.com/doc/refman/5.7/en/char.html #注意:char和varchar括号内的参数指的都是字符的长度 #char类型:定 ...

  8. JavaScript实现延时提示框

    <html> <head> <meta charset="utf-8"> <title>无标题文档</title> &l ...

  9. Android一对多蓝牙连接示例APP

    一对多蓝牙连接示例,基于Google BluetoothChat修改,实现一对多聊天(一个服务端.多个客户端),类似聊天室. 主要功能: 客户端的发出的消息所有终端都能收到(由服务端转发) 客户端之间 ...

  10. 杭电2061WA

    #include<stdio.h> struct mem { char s[50]; int c; int f; }; int main() { struct mem x[60]; int ...