zoukankan      html  css  js  c++  java
  • 设计模式七大原则之单一职责原则

    单一职责原则:不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。

    也就是类A 如果负责两项任务T1和T2,如果当T1职责需求变更需要修改类A,可能会对T2导致影响或故障

    这个时候我们就需要将任务T1和T2分离开来,遵循单一原则,既修改T1,T2不受影响

     举个例子:

    class Animal{
        public void Run(String animal){
           System.out.println(animal+"在地上跑");
        }
    }
    
    public class Client{
        public static void main(String[] args){
           Animal animal = new Animal();
           animal.Run("");
           animal.Run("");
           animal.Run("");
        }
    }

    运行结果:

        牛在地上跑

        羊在地上跑

        猪在地上跑

    这没什么问题,但有一天我们需要修改需求,出现了鱼,鸟,水下和飞禽,这些动物,总不可能也是在地上跑的吧?

    我们来进行修改

    class Animal{
        public void Run(String animal){
           System.out.println(animal+"在地上跑");
        }
    
     public void AquaticRun(String animal){
           System.out.println(animal+"在水下游");
        }
    
     public void BirdRun(String animal){
           System.out.println(animal+"在天上飞");
        }
    
    
    }
    
    public class Client{
        public static void main(String[] args){
           Animal animal = new Animal();
           animal.Run("");
           animal.Run("");
           animal.Run("");
           animal.BirdRun("猫头鹰");
           animal.AquaticRun("鲨鱼");
        }
    }

    运行结果:

        牛在地上跑

        羊在地上跑

        猪在地上跑

        猫头鹰在天上飞

        鲨鱼在水里游

    很显然,只需要增加一个方法就可以满足我们的要求,简单粗暴,但这种方式违反了单一原则,一个类只负责一项业务职责,我们接着通过遵循单一原则进行最后修改

    class Animal{
        public void Run(String animal){
           System.out.println(animal+"在地上跑");
        }
    }
    
    class AquaticAnimal{
       public void Run(String animal){
           System.out.println(animal+"在水下游");
         }
    }
    
    class BirdAnimal{
       public void Run(String animal){
           System.out.println(animal+"在天上飞");
         }
    }
    
    
    public class Client{
        public static void main(String[] args){
           Animal animal = new Animal();
           animal.Run("");
           animal.Run("");
           animal.Run("");
           AquaticAnimal aquatic=new AquaticAnimal();  
           aquatic.Run("鲨鱼");
           BirdAnimal  bird =new BirdAnimal();
           aquatic.Run("猫头鹰");
        }
    }

    这样如果新增一类动物,只需要新加一个类就可以了,不会影响其他职责,单一职责原则,主要是控制粒度大小,实现高内聚低耦合

  • 相关阅读:
    转:jQuery选择器大全(48个代码片段+21幅图演示)
    转:Web 开发中很实用的10个效果【附源码下载】
    转:在网站开发中很有用的8个 jQuery 效果【附源码】
    转:35个让人惊讶的 CSS3 动画效果演示
    转:总结const、readonly、static三者的区别
    转:C# 深入理解堆栈、堆在内存中的实现
    推荐:Asp.Net MVC 多语言(html+js共用一套资源文件)
    转:HttpModule与HttpHandler详解
    转: ASP.NET MVC 多语言配置
    spring集合类型注入
  • 原文地址:https://www.cnblogs.com/yangda/p/11908494.html
Copyright © 2011-2022 走看看