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 }
  • 相关阅读:
    第十二章学习笔记
    UVa OJ 107 The Cat in the Hat (戴帽子的猫)
    UVa OJ 123 Searching Quickly (快速查找)
    UVa OJ 119 Greedy Gift Givers (贪婪的送礼者)
    UVa OJ 113 Power of Cryptography (密文的乘方)
    UVa OJ 112 Tree Summing (树的求和)
    UVa OJ 641 Do the Untwist (解密工作)
    UVa OJ 105 The Skyline Problem (地平线问题)
    UVa OJ 100 The 3n + 1 problem (3n + 1问题)
    UVa OJ 121 Pipe Fitters (装管子)
  • 原文地址:https://www.cnblogs.com/justdoitba/p/9036460.html
Copyright © 2011-2022 走看看