• 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 }
  • 相关阅读:
    .net c# gif动画如何添加图片水印
    Webbrowser控件设置所使用的内核
    WPF 用户控件不显示标记
    Spark应用场景以及与hadoop的比较
    Spark基本函数学习
    uniapp H5发布后在部分手机字体变大,导致页面错乱
    uni 小程序图片路径转base64
    uniapp px与upx(rpx)相互转换
    uniapp调用扫码功能
    uniapp 引入第三方字体
  • 原文地址:https://www.cnblogs.com/justdoitba/p/9036460.html
Copyright © 2020-2023  润新知