1. 程式人生 > >java學習(四)代碼的設計

java學習(四)代碼的設計

方法 聯系 string 封裝 代碼 his 站點 add 團隊

一、目的

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方面的學習中,要努力做到界面代碼與運算代碼無耦合,各方法之間通過使用接口的方式實現低耦合,清晰的分解出代碼與代碼之間的相關聯系、方法的互相調用,使得代碼整潔。

java學習(四)代碼的設計