zoukankan      html  css  js  c++  java
  • 2单一职责原则SRP

    一、什么是单一职责原则

      单一职责原则(Single Responsibility Principle ): 就一个类而言,应该仅有一个引起它变化的 原因。

    二、多功能的山寨手机

      山寨手机的功能: 拍照、摄像、手机游戏、网络摄像头、GPS、炒股 等等。

      功能多、但是每一个功能都不强。

      拍摄功能 ------>专业摄像机或照相机

      手机游戏 ------>PSP

      网络摄像头---->专业摄像头

      GPS功能------>专业GPS导航系统

    三、烦人的山寨手机

      每一个职责都是一个变化的轴线,当需求变化 时会反映为类的职责的变化。如果一个类承担的 职责多于一个,那么引起它变化的原因就有多个。 一个职责的变化甚至可能会削弱或者抑制类完成 其他职责的能力,从而导致脆弱的设计。

    四、单一职责原则示例

      接受客户端输入并提交到数据库。

      原有设计: 一个类负责接受客户端输入,对客户端输入进 行校验,连接数据库,并提交数据到数据库。

      现有设计: 一个功能也就是一个职责由一个类来负责。

    原有设计:

     1 import java.util.Scanner;
     2 
     3 public class SaveToDB {
     4     private String username;
     5     private String upassword;
     6     
     7     //获得客户端输入
     8     public void shuru() {
     9         Scanner scanner = new Scanner(System.in);
    10         System.out.println("请输入用户名");
    11         username = scanner.nextLine();
    12         System.out.println("请输入密码");
    13         upassword = scanner.nextLine();
    14     }
    15     
    16     //进行数据校验
    17     public boolean validate() {
    18         if(username == null || "".equals(username.trim())) {
    19             System.out.println("用户名不能为空");
    20             return false;
    21         }
    22         if(upassword == null || "".equals(upassword.trim())) {
    23             System.out.println("密码不能为空");
    24             return false;
    25         }
    26         return true;
    27     }
    28     
    29     //连接数据库
    30     public void getConnection() {
    31         System.out.println("获得数据库连接");
    32     }
    33     
    34     //进行数据操作
    35     public void save() {
    36         System.out.println("将" + username + "保存到了数据库");
    37         System.out.println("将" + upassword + "保存到了数据库");
    38     }
    39 }

    测试

     1 public class MainClass {
     2     public static void main(String[] args) {
     3         //接受客户端的输入
     4         SaveToDB std = new SaveToDB();
     5         std.shuru();
     6         if(std.validate()) {
     7             std.getConnection();
     8             std.save();
     9         }
    10     }
    11 }

    ==========================================================================

    现有设计:

    客户端输入

     1 import java.util.Scanner;
     2 
     3 public class Input {
     4     private String username;
     5     private String upassword;
     6     
     7     //获得客户端输入
     8     public void shuru() {
     9         Scanner scanner = new Scanner(System.in);
    10         System.out.println("请输入用户名");
    11         username = scanner.nextLine();
    12         System.out.println("请输入密码");
    13         upassword = scanner.nextLine();
    14     }
    15 
    16     public String getUsername() {
    17         return username;
    18     }
    19 
    20     public void setUsername(String username) {
    21         this.username = username;
    22     }
    23 
    24     public String getUpassword() {
    25         return upassword;
    26     }
    27 
    28     public void setUpassword(String upassword) {
    29         this.upassword = upassword;
    30     }
    31 }

    数据操作

    1 public class DAOImp {
    2     //进行数据操作
    3     public void save(String username,String upassword) {
    4         System.out.println("将" + username + "保存到了数据库");
    5         System.out.println("将" + upassword + "保存到了数据库");
    6     }
    7 }

    连接数据库

    1 public class DBManager {
    2     //连接数据库
    3     public static void getConnection() {
    4         System.out.println("获得数据库连接");
    5     }
    6 }

    数据校验

     1 public class Validator {
     2     //进行数据校验
     3     public boolean validate(String username, String upassword) {
     4         if(username == null || "".equals(username.trim())) {
     5             System.out.println("用户名不能为空");
     6             return false;
     7         }
     8         if(upassword == null || "".equals(upassword.trim())) {
     9             System.out.println("密码不能为空");
    10             return false;
    11         }
    12         return true;
    13     }
    14 }

    测试

     1 public class MainClass {
     2     public static void main(String[] args) {
     3         Input input = new Input();
     4         input.shuru();
     5         Validator validator = new Validator();
     6         if(validator.validate(input.getUsername(), input.getUpassword())){
     7             DBManager.getConnection();
     8             DAOImp dao = new DAOImp();
     9             dao.save(input.getUsername(), input.getUpassword());
    10         }
    11     }
    12 }
  • 相关阅读:
    js 改变颜色值
    React之使用Context跨组件树传递数据
    App.js实现使用js开发app的应用,此文是中文文档
    转: CSS3 @media 用法总结
    转: 如何用手机访问电脑本地 localhost 网页或者服务器, 以调试web项目
    js 替换字符串中所有匹配的字符
    转:display:flex不兼容Android、Safari低版本的解决方案 【flex布局】
    转:HTML5页面如何在手机端浏览器调用相机、相册功能
    文本相似度度量
    idea中maven中jdk版本的选择(转)
  • 原文地址:https://www.cnblogs.com/justdoitba/p/9036460.html
Copyright © 2011-2022 走看看