JS面向对象的七大基本原则(单一/开闭)

单一原则

类的设计只为完成某一类任务;类中方法只为完成某一个任务;模块的设计只为完成某一个功能;这些体现的都是单一原则。

如下展示

import {model} from 'mongoose';
const User = model('User');
export default class UserModel {
    static newUser(data) {
        return new User(data);
    }
    
    static saveUser (document) {
        return document.save();
    }
   
    static otherNewUser(data) {
        return model.create(data);
    }
    

}

 

在使用mongoose时,为创建一个document,模块实现了3个方法new Model();  document.save(); Model.create(),。

其中Model.create()就是先 new Model(), 然后调用 save()写入数据库;直接使用create虽然简化了一点开发工作,但是在以后开发过程中的复用性却远远不及前两个方法;原因就是create方法失去了单一原则。

开闭原则

构思基类时,确保基类的属性/行为能够描述所有实例(包括子类实例)的一致特征,不为某单一实例修改属性/行为;实例之间的区别通过子类扩展,避免实例间互相影响。一句话描述就是 对修改关闭,对扩展开放。

如下展示

class Person {
    constructor () {
        this.name = '';
        /* 其它一些通用属性: age,sex,。。。。 */
    }
     /* 其它一些通用行为: getAge,setSex,。。。。 */
    setName (name) {
        this.name = name;
    }

    getName () {
        return this.name;
    }
}

class Adult extends Person {
    constructor () {
        super();
        this.career = '';//成年人特有的属性:职业
    }

    setCareer (career) {
        this.career = career
    }

    getCareer () {
        return this.career;
    }
}

class Child extends Person {
    constructor () {
        super();
        this.kindergaten;//小朋友特有的属性:幼儿园
    }

    setKdg (kdg) {
        this.kindergaten = kdg;
    }

    getKdg () {
        return this.kindergaten;
    }
}

上述两个子类 Adult/Child 都是对Person的扩展,各自扩展出自己独特的属性和行为,而不去为了某一独特需求更改基类。

 

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值