• 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的扩展,各自扩展出自己独特的属性和行为,而不去为了某一独特需求更改基类。

  • 相关阅读:
    Dijkstra(单队优化)
    最短路(hdu4725)(建点巧妙)
    次小生成树
    2019暑假集训DAY1(problem3.play)(单调栈思想)
    平衡树
    线段树区间加乘(模板)
    杜恩德的新博客,都来看看-duende99
    oracle 11g如何完全卸载
    如何连接别人电脑上的Oracle数据库--duende99
    Java中的Filter过滤器
  • 原文地址:https://www.cnblogs.com/pandapeter/p/10427522.html
Copyright © 2020-2023  润新知