zoukankan      html  css  js  c++  java
  • java学习(四)代码的设计

    一、目的

    1、为了使程序员编写的代码更加的简洁,使人阅读起来更加流畅

    2、将运算代码与界面代码完全分离开来,利于团队开发,提高团队之间的工作效率

    3、 在很短的时间内可以替换整个站点的外观;

    4、使程序员可以抽象编程,而无须接触HTML代码;

    5、可以重复利用以前的模板。

    二、示例

      引用前一篇的记忆曲线的JSP文件

    1、未进行分离的代码

      1 <%@ page language="java" contentType="text/html; charset=UTF-8"
      2     pageEncoding="UTF-8"%>
      3     <%@ page import = "java.util.Date , java.text.*" %>
      4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
      5 <html>
      6 <head>
      7 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      8 <title>Insert title here</title>
      9 </head>
     10 <body>
     11    <table border=1>
     12      <tr>
     13      <td>天数</td>
     14      <td>新学习</td>
     15      <td>复习前1天</td>
     16      <td>复习前2天</td>
     17      <td>复习前4天</td>
     18      <td>复习前7天</td>
     19      <td>复习前15天</td>
     20      </tr>
     21      <%  
     22      Date today=new java.util.Date();//向上转型
     23     SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd");
     24      
     25      int group=72;
     26      int days=group+15;
     27      for(int i=0;i<days;i++){
     28          
     29            java.util.Calendar calendar = new java.util.GregorianCalendar();
     30          //String day=today.toString(); 
     31          //String day=today.getTime()+"";
     32          //给日历一个初始时间
     33          calendar.setTime(today);
     34          //日历可以获取的时间
     35          
     36          calendar.add(java.util.Calendar.DATE,i);
     37          String day=sdf.format( calendar.getTime());
     38          String task1="";//
     39          String task2="";
     40          String task3="";
     41          String task4="";
     42          String task5="";
     43          String task6="";
     44          //求算任务1
     45          if(i<=group-1){
     46              task1=(i+1)+"";         
     47          }
     48          else{
     49              task1="--";         
     50          }
     51        //求算任务2
     52          if(i<=0||i>group){
     53              task2=(i+1)+"";         
     54          }
     55          else{
     56              task2=i+"";         
     57          }
     58        //求算任务3
     59          if(i<=(0+1)||(i-1)>=(group+1)){
     60              task3="--";         
     61          }
     62          else{
     63              task3=(i-1)+"";         
     64          }
     65         //求算任务4
     66         if((i-3)<=0||(i-3)>=(group+1)){
     67             task4="--";
     68             
     69         }else{
     70             task4=(i-3)+"";
     71         }
     72       //求算任务5
     73         if((i-6)<=0||(i-3)>=(group+1)){
     74             task5="--";
     75             
     76         }else{
     77             task5=(i-6)+"";
     78         }
     79       //求算任务6
     80         if((i-14)<=0||(i-14)>=(group+1)){
     81             task6="--";
     82             
     83         }else{
     84             task6=(i-14)+"";
     85         }
     86    
     87       %>
     88      <tr>
     89       <td><%=day %></td>
     90       <td><%=task1%> </td>
     91       <td><%=task2 %></td>
     92       <td><%=task3 %></td>
     93       <td><%=task4 %></td>
     94       <td><%=task5 %></td>
     95       <td><%=task6 %></td>
     96      </tr>     
     97      <%
     98      }
     99      %>
    100    </table>
    101 </body>
    102 </html>

    由代码可知:在JSP的代码界面中掺杂了大部分的运算代码,造成了代码的凌乱与耦合,今天的学习目的就是将这段JSP中的运算代码给拿出来,保证JSP代码的纯净

    2、进行代码的分离

    2.1、纯净化JSP代码

      即将JSP中无关页面布局的代码除去,保留有关页面布局的相关代码,以达到JSP的纯净模式

     1 <%@ page language="java" contentType="text/html; charset=UTF-8"
     2     pageEncoding="UTF-8"%>
     3 <%@ page import="java.util.*,java.text.SimpleDateFormat,web.MemTask,web.MemTaskImpl,entity.DayTask" %>
     4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     5 <html>
     6 <head>
     7 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     8 <title>Insert title here</title>
     9 </head>
    10 <body>
    11     <table border="1px">
    12         <tr>
    13             <td>日期</td>
    14             <td>新学习</td>
    15             <td>复习前1课</td>
    16             <td>复习前2课</td>
    17             <td>复习前4课</td>
    18             <td>复习前7课</td>
    19             <td>复习前15课</td>
    20         </tr>
    21         <tr>
    22             <td><%=item.getDay()%></td>
    23             <td><%=item.getTask1()%></td>
    24             <td><%=item.getTask2()%></td>
    25             <td><%=item.getTask3()%></td>
    26             <td><%=item.getTask4()%></td>
    27             <td><%=item.getTask5()%></td>
    28             <td><%=item.getTask6()%></td>
    29         </tr>
    30     </table>
    31 </body>
    32 </html>

    2.2、对方法进行封装

    先在src中创建名为DayTask的Java文件,并在其中编写定义实现类和实现方法的代码

     代码如下:

     1 package entity;
     2 
     3 public class DayTask {
     4     private String day;
     5     private String task1;
     6     private String task2;
     7     private String task3;
     8     private String task4;
     9     private String task5;
    10     private String task6;
    11     public String getDay(){
    12         return day;
    13     }
    14     public void setDay(String day) {
    15         this.day = day;
    16     }
    17     public String getTask1() {
    18         return task1;
    19     }
    20     public void setTask1(String task1) {
    21         this.task1 = task1;
    22     }
    23     public String getTask2() {
    24         return task2;
    25     }
    26     public void setTask2(String task2) {
    27         this.task2 = task2;
    28     }
    29     public String getTask3() {
    30         return task3;
    31     }
    32     public void setTask3(String task3) {
    33         this.task3 = task3;
    34     }
    35     public String getTask4() {
    36         return task4;
    37     }
    38     public void setTask4(String task4) {
    39         this.task4 = task4;
    40     }
    41     public String getTask5() {
    42         return task5;
    43     }
    44     public void setTask5(String task5) {
    45         this.task5 = task5;
    46     }
    47     public String getTask6() {
    48         return task6;
    49     }
    50     public void setTask6(String task6) {
    51         this.task6 = task6;
    52     }
    53     
    54 }

    2.3、设置接口类

    在编写代码是要时刻注意对接口的使用:

      1. 从定义中,“接口方法可以在不同的方法被不同的类实现”,说明使用接口能够方便的去扩展,比如你在client中调用了一个接口,以后想用其他的实现,只需要重写一个实现类并扩展工厂就行了。

      2. 可复用性,比如大型项目中,将Hibernate换成Ibatis的时候,可以只需要在Spring中配置实现类就可以替换了。接口属性能够方便的配置。

      3.项目开发人员的分工,当接口定义好后,不同模块的开发人员可以先根据接口的定义开发自己的模块,提高了开发效率

      4.方便早期的设计和以后的扩展。

    于是我们需要编写一个接口类MemTask

    代码如下:

     1 package web;
     2 import java.util.List;
     3 
     4 import entity.DayTask;
     5 
     6 public interface MemTask {
     7     
     8     public List<DayTask> getAllTask(int group);
     9 
    10 }

    2.4、实现接口类

    新建一个MemTaskImpl类文件,该文件中的代码是用来实现MenTask类中的接口,并编写具体的类来实现算法。

     1 package web;
     2 
     3 import java.text.SimpleDateFormat;
     4 import java.util.ArrayList;
     5 import java.util.Calendar;
     6 import java.util.Date;
     7 import java.util.GregorianCalendar;
     8 import java.util.List;
     9 
    10 import entity.DayTask;
    11 
    12 public class MemTaskImpl implements MemTask {
    13 
    14     @Override
    15     public List<DayTask> getAllTask(int group) {
    16         List<DayTask> dayTaskList = new ArrayList<DayTask>();
    17 
    18         Date today = new Date();
    19         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    20         // 总次数
    21         int days = group + 15;
    22         for (int i = 0; i < days; i++) {
    23             Calendar calendar = new GregorianCalendar();
    24             // 给日历一个初始时间
    25             calendar.setTime(today);
    26             // 日历翻页
    27             calendar.add(Calendar.DATE, i);
    28             DayTask dayTask = new DayTask();
    29             dayTask.setDay(sdf.format(calendar.getTime()) + " ");
    30 
    31             // 求算任务1
    32             if (i <= group - 1) {
    33                 dayTask.setTask1((i + 1) * 2 - 1 + "");
    34             } else {
    35                 dayTask.setTask1("--");
    36             }
    37 
    38             // 求算任务2
    39             if (i <= 0 || i >= (group + 1)) {
    40                 dayTask.setTask2("--");
    41             } else {
    42                 dayTask.setTask2(i * 2 - 1 + "");
    43             }
    44 
    45             
    46             // 求算任务3
    47 
    48             if ((i - 1) <= 0 || (i - 1) >= (group + 1)) {
    49                 dayTask.setTask3("--");
    50 
    51             } else {
    52                 dayTask.setTask3((i - 1) * 2 - 1 + "");
    53 
    54             }
    55             //求算任务4
    56             if ((i-3)<=0||(i-3)>=(group+1)){
    57                 dayTask.setTask4("--");
    58                 
    59             }else{
    60                 dayTask.setTask4((i-3)*2-1+"");
    61                 
    62             }
    63             //求算任务5
    64             if ((i-6)<=0||(i-6)>=(group+1)){
    65                 dayTask.setTask5("--");
    66                 
    67             }else{
    68                 dayTask.setTask5((i-6)*2-1+"");
    69                 
    70             }
    71             //求算任务6
    72             if ((i-14)<=0||(i-14)>=(group+1)){
    73                 dayTask.setTask6("--");
    74         
    75             }else{
    76                 dayTask.setTask6((i-14)*2-1+"");
    77                 
    78             }
    79             dayTaskList.add(dayTask);
    80         }
    81         
    82         return dayTaskList;
    83     }
    84 
    85 }

    2.5、在JSP界面中成功调用封装的类与方法

     1 <%@ page language="java" contentType="text/html; charset=UTF-8"
     2     pageEncoding="UTF-8"%>
     3 <%@ page import="java.util.*,java.text.SimpleDateFormat,web.MemTask,web.MemTaskImpl,entity.DayTask" %>
     4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     5 <html>
     6 <head>
     7 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     8 <title>Insert title here</title>
     9 </head>
    10 <body>
    11     <table border="1px">
    12         <tr>
    13             <td>日期</td>
    14             <td>新学习</td>
    15             <td>复习前1课</td>
    16             <td>复习前2课</td>
    17             <td>复习前4课</td>
    18             <td>复习前7课</td>
    19             <td>复习前15课</td>
    20         </tr>
    21 <%
    22 //它的实例创建有2个办法
    23 //1.传统的new 对象方法
    24 //2.使用ioc注入
    25 
    26 //调用已经封装的方法进行运算 
    27 MemTask memTask = new MemTaskImpl(); 
    28 List<DayTask> dayTaskList = memTask.getAllTask(20);
    29 for (DayTask item:dayTaskList){    
    30 %>
    31         <tr>
    32             <td><%=item.getDay()%></td>
    33             <td><%=item.getTask1()%></td>
    34             <td><%=item.getTask2()%></td>
    35             <td><%=item.getTask3()%></td>
    36             <td><%=item.getTask4()%></td>
    37             <td><%=item.getTask5()%></td>
    38             <td><%=item.getTask6()%></td>
    39         </tr>
    40<%} %>
    41     </table>
    42 </body>
    43 </html>

    2.6、运行结果

    启动Tomcat服务,运行该项目

    得到的运行结果和前者的效果是一致的,证明了代码的分离是成功的

    三、总结

    在Java中web方面的学习中,要努力做到界面代码与运算代码无耦合,各方法之间通过使用接口的方式实现低耦合,清晰的分解出代码与代码之间的相关联系、方法的互相调用,使得代码整洁。

     

  • 相关阅读:
    生成一个uuid字符串,并去除多余的符号
    Jackson错误:Can not deserialize instance of java.lang.String out of START_OBJECT token
    jdk1.8换成11,启动项目报错java.net.MalformedURLException: unknown protocol: jrt
    RSA算法
    springboot集成thymeleaf中遇到不能反悔页面,只能反悔字符串
    Caused by: java.lang.IllegalArgumentException: DefaultSerializer requires a Serializable payload but received an object of type [VCodeModel]
    [08001] Could not create connection to database server. Attempted reconnect 3 times. Giving up.
    Caused by: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Out of range value for column 'phone' at row 1
    jstl是自动就有的吗,不是的Unknown tag (c:if).
    mysql 设置编码 Incorrect string value: 'xE9x98xBFxE4xB8x89...' for column 'cont,mysql乱码
  • 原文地址:https://www.cnblogs.com/Mingsnow/p/6858273.html
Copyright © 2011-2022 走看看