• 六大设计原则-单一职责原则


    git 地址:https://github.com/Zs-xiazhi/pattern
    1.单一职责原则(Single Responsibility Principle)(SRP)
    单一职责的定义为: 一个类应该有且只有一个原因引起类的变化
    此原则的核心是:解耦和增强内聚性
    首先我们来看一个类设计:
    人有姓名,年龄,性别等属性,也有吃饭睡觉等行为,依此创建一个类:
    package com.xiazhi.principle.srp;
    
    /**
     * @author ZhaoShuai
     * @date Create in 2020/4/12
     **/
    public class Person {
        /**
         * 姓名
         */
        private String name;
        /**
         * 年龄
         */
        private Integer age;
        /**
         * 性别:1-男,0-女
         */
        private Integer gander;
    
        public void eat() {
            System.out.println("吃饭");
        }
    
        public void sleep() {
            System.out.println("睡觉");
        }
    
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Integer getAge() {
            return age;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    
        public Integer getGander() {
            return gander;
        }
    
        public void setGander(Integer gander) {
            this.gander = gander;
        }
    }
    可以看到人的属性和行为都放在一个类里面,如果此时要添加一个属性或者添加一个学习的行为,都会导致这个类的结构改变,这个类的职责既要维护人的属性,又要维护人的行为,因此就有两个职责,不符合职责单一性原则。
    当然,这样写也没有问题,但是会导致类的职责不明确,为后期维护带来困难。因此将这个类进行拆分:
    /**
     * 人的属性
     * @author ZhaoShuai
     * @date Create in 2020/4/12
     **/
    public class PersonProperty {
        private String name;
        private Integer age;
        private Integer gander;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Integer getAge() {
            return age;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    
        public Integer getGander() {
            return gander;
        }
    
        public void setGander(Integer gander) {
            this.gander = gander;
        }
    }
    /**
     * 人的行为
     * @author ZhaoShuai
     * @date Create in 2020/4/12
     **/
    public interface PersonAction {
    
        void sleep();
    
        void eat();
    
    }
    public class PersonInstance implements PersonAction {
    
        private PersonProperty person;
        @Override
        public void sleep() {
            System.out.println(this.person.getName() + "吃饭");
        }
    
        @Override
        public void eat() {
            System.out.println(this.person.getName() + "睡觉");
        }
    
        public PersonProperty getPerson() {
            return person;
        }
    
        public void setPerson(PersonProperty person) {
            this.person = person;
        }
    }
    PersonInstance实体实现了行为的接口,而他的内部则有一个PersonProperty的字段。当Person需要添加一个新的属性如:学历等,只需要更改PersonProperty类就可以了,与其他的
    类无关,其他的类都务需改动,当需要添加新的行为,如:学习时,只需要改变接口及他的实现类,而务需其他的改动。这样就实现了类的职责单一化。
    通过上面的例子来分析下,职责单一性的好处:
    • `1.类的复杂性降低了`
    • `2.负责性降低了,类的可阅读性自然提高了`
    • `3.可阅读性提高了,那么可维护性自然就提高了`
    • `4.类的变更风险降低了,原来有两个变化可能导致类的结构发生变化,现在每个类的职责都明确了,每一个变化都有相应的变更类,也就是只有一个原因引起类的变化`
  • 相关阅读:
    Mac安装LightGBM
    用于视频超分辨率的可变形三维卷积
    ORB-SLAM3 单目地图初始化(终结篇)
    重用地图的单目视觉惯导SLAM系统
    2020,我的秋招感悟!
    超详细解读ORB-SLAM3单目初始化(下篇)
    基于改进的点对特征的6D位姿估计
    深入研究自监督单目深度估计:Monodepth2
    ORB-SLAM3 细读单目初始化过程(上)
    基于视觉和惯性传感器的移动机器人手遥操作系统
  • 原文地址:https://www.cnblogs.com/Zs-book1/p/12713974.html
Copyright © 2020-2023  润新知