java與設(shè)計模式源代碼 java開發(fā)設(shè)計模式

如何快速讀懂項目源碼javaWeb

一:學(xué)會如何讀一個JavaWeb項目源代碼 步驟:表結(jié)構(gòu)-web.xml-mvc-db-spring

10年積累的成都網(wǎng)站設(shè)計、成都做網(wǎng)站經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先網(wǎng)站設(shè)計后付款的網(wǎng)站建設(shè)流程,更有阿圖什免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

ioc-log- 代碼

1、先了解項目數(shù)據(jù)庫的表結(jié)構(gòu),這個方面是最容易忘記 的,有時候我們只顧著看每一個方法是怎么進行的,卻沒

有去了解數(shù)據(jù)庫之間的主外鍵關(guān)聯(lián)。其實如果先了解數(shù)據(jù) 庫表結(jié)構(gòu),再去看一個方法的實現(xiàn)會更加容易。

2、然后需要過一遍web.xml,知道項目中用到了什么攔

截器,監(jiān)聽器,過濾器,擁有哪些配置文件。如果是攔截 器,一般負責(zé)過濾請求,進行AOP 等;如果是監(jiān) 可能是定時任務(wù),初始化任務(wù);配置文件有如使用了 spring

后的讀取mvc 相關(guān),db 相關(guān),service 相關(guān),aop 相關(guān)的文件。

3、查看攔截器,監(jiān)聽器代碼,知道攔截了什么請求,這

個類完成了怎樣的工作。有的人就是因為缺少了這一步, 自己寫了一個action,配置文件也沒有寫錯,但是卻怎么

調(diào)試也無法進入這個action,直到別人告訴他,請求被攔

4、接下來,看配置文件,首先一定是mvc相關(guān)的,如 springmvc

中,要請求哪些請求是靜態(tài)資源,使用了哪些 view 策略,controller 注解放在哪個包下等。 然后是db 相關(guān)配置文件,看使用了什么數(shù)據(jù)庫,使用了

什么orm框架,是否開啟了二級緩存,使用哪種產(chǎn)品作 為二級緩存,事務(wù)管理的處理,需要掃描的實體類放在什 么位置。最后是spring 核心的ioc

功能相關(guān)的配置文件, 知道接口與具體類的注入大致是怎樣的。當(dāng)然還有一些如 apectj 置文件,也是在這個步驟中完成

5、log

相關(guān)文件,日志的各個級別是如何處理的,在哪些 地方使用了log 記錄日志

6、從上面幾點后知道了整個開源項目的整體框架,閱讀 每個方法就不再那么難了。

7、當(dāng)然如果有項目配套的開發(fā)文檔也是要閱讀的。

JAVA 采用單例設(shè)計模式設(shè)計日志處理類,并寫出代碼

import?java.util.Date;

public?class?Logger?{

private?static?Logger?instance;

private?static?Class?clazz;

private?Logger()?{

}

private?Logger(Class?clazz)?{

this.instance?=?new?Logger();

this.clazz?=?clazz;

}

public?static?Logger?getLogger(Class?clazz)?{

if?(instance?==?null)?{

synchronized?(Logger.class)?{

if?(instance?==?null)?{

instance?=?new?Logger(clazz);

}

}

}

return?instance;

}

public?void?info(String?msg)?{

System.out.println(clazz.getName()?+?"["?+?new?Date().toLocaleString()

+?"][info]:"?+?msg);

}

public?void?error(String?msg)?{

System.out.println(clazz.getName()?+?"["?+?new?Date().toLocaleString()

+?"][error]:"?+?msg);

}

public?void?warn(String?msg)?{

System.out.println(clazz.getName()?+?"["?+?new?Date().toLocaleString()

+?"][warn]:"?+?msg);

}

public?void?log(String?msg)?{

System.out.println(clazz.getName()?+?"["?+?new?Date().toLocaleString()

+?"][log]:"?+?msg);

}

public?static?void?main(String?args[])?{

Logger?s?=?Logger.getLogger(String.class);

s.info("普通消息");

}

}

高分求兩個簡單的JAVA設(shè)計源代碼

上面 wuzhikun12同學(xué)寫的不錯,但我想還不能運行,并且還不太完善。我給個能運行的:(注意:文件名為:Test.java)

//要實現(xiàn)對象間的比較,就必須實現(xiàn)Comparable接口,它里面有個compareTo方法

//Comparable最好使用泛型,這樣,無論是速度還是代碼量都會減少

@SuppressWarnings("unchecked")

class Student implements ComparableStudent{

private String studentNo; //學(xué)號

private String studentName; //姓名

private double englishScore; //英語成績

private double computerScore; //計算機成績

private double mathScore; //數(shù)學(xué)成績

private double totalScore; //總成績

//空構(gòu)造函數(shù)

public Student() {}

//構(gòu)造函數(shù)

public Student(String studentNo,String studentName,double englishSocre,double computerScore,double mathScore) {

this.studentNo = studentNo;

this.studentName = studentName;

this.englishScore = englishSocre;

this.computerScore = computerScore;

this.mathScore = mathScore;

}

//計算總成績

public double sum() {

this.totalScore = englishScore+computerScore+mathScore;

return totalScore;

}

//計算評測成績

public double testScore() {

return sum()/3;

}

//實現(xiàn)compareTO方法

@Override

public int compareTo(Student student) {

double studentTotal = student.getTotalScore();

return totalScore==studentTotal?0:(totalScorestudentTotal?1:-1);

}

//重寫toString方法

public String toString(){

return "學(xué)號:"+this.getStudentNo()+" 姓名:"+this.getStudentName()+" 英語成績:"+this.getEnglishScore()+" 數(shù)學(xué)成績:"+this.getMathScore()+" 計算機成績:"+this.getComputerScore()+" 總成績:"+this.getTotalScore();

}

//重寫equals方法

public boolean equals(Object obj) {

if(obj == null){

return false;

}

if(!(obj instanceof Student)){

return false;

}

Student student = (Student)obj;

if(this.studentNo.equals(student.getStudentName())) { //照現(xiàn)實來說,比較是不是同一個學(xué)生,應(yīng)該只是看他的學(xué)號是不是相同

return true;

} else {

return false;

}

}

/*以下為get和set方法,我個人認(rèn)為,totalScore的set的方法沒必要要,因為它是由其它成績計算出來的

在set方法中,沒設(shè)置一次值,調(diào)用一次sum方法,即重新計算總成績

*/

public String getStudentNo() {

return studentNo;

}

public void setStudentNo(String studentNo) {

this.studentNo = studentNo;

sum();

}

public String getStudentName() {

return studentName;

}

public void setStudentName(String studentName) {

this.studentName = studentName;

sum();

}

public double getEnglishScore() {

return englishScore;

}

public void setEnglishScore(double englishScore) {

this.englishScore = englishScore;

sum();

}

public double getComputerScore() {

return computerScore;

}

public void setComputerScore(double computerScore) {

this.computerScore = computerScore;

sum();

}

public double getMathScore() {

return mathScore;

}

public void setMathScore(double mathScore) {

this.mathScore = mathScore;

sum();

}

public double getTotalScore() {

return totalScore;

}

}

//Student子類學(xué)習(xí)委員類的實現(xiàn)

class StudentXW extends Student {

//重寫父類Student的testScore()方法

@Override

public double testScore() {

return sum()/3+3;

}

public StudentXW() {}

//StudentXW的構(gòu)造函數(shù)

public StudentXW(String studentNo,String studentName,double englishSocre,double computerScore,double mathScore) {

super(studentNo,studentName,englishSocre,computerScore,mathScore);

}

}

//Student子類班長類的實現(xiàn)

class StudentBZ extends Student {

//重寫父類Student的testScore()方法

@Override

public double testScore() {

return sum()/3+5;

}

public StudentBZ() {}

//StudentXW的構(gòu)造函數(shù)

public StudentBZ(String studentNo,String studentName,double englishSocre,double computerScore,double mathScore) {

super(studentNo,studentName,englishSocre,computerScore,mathScore);

}

}

//測試類

public class Test {

public static void main(String[] args) {

//生成若干個student類、StudentXW類、StudentBZ類

Student student1 = new Student("s001","張三",70.5,50,88.5);

Student student2 = new Student("s002","李四",88,65,88.5);

Student student3 = new Student("s003","王五",67,77,90);

StudentXW student4 = new StudentXW("s004","李六",99,88,99.5);

StudentBZ student5 = new StudentBZ("s005","朱漆",56,65.6,43.5);

Student[] students = {student1,student2,student3,student4,student5};

for(int i = 0 ; istudents.length; i++){

double avgScore = students[i].testScore();

System.out.println(students[i].getStudentName()+"學(xué)生的評測成績?yōu)椋?+ avgScore+"分");

}

}

}

運行結(jié)果為:

張三學(xué)生的評測成績?yōu)椋?9.66666666666667分

李四學(xué)生的評測成績?yōu)椋?0.5分

王五學(xué)生的評測成績?yōu)椋?8.0分

李六學(xué)生的評測成績?yōu)椋?8.5分

朱漆學(xué)生的評測成績?yōu)椋?0.03333333333333分

java源碼中應(yīng)用哪些設(shè)計模式

3種工廠模式 單例模式 策略模式 用的都很多 其實實際開發(fā)中用的最多的還是工廠和單例,其余的根本沒用過。

急求java設(shè)計模式,要求用到兩種設(shè)計模式 求詳細代碼

.餓漢式單例類

//餓漢式單例類.在類初始化時,已經(jīng)自行實例化

public class Singleton1 {

//私有的默認(rèn)構(gòu)造子

private Singleton1() {}

//已經(jīng)自行實例化

private static final Singleton1 single = new Singleton1();

//靜態(tài)工廠方法

public static Singleton1 getInstance() {

return single;

}

}

2.懶漢式單例類

//懶漢式單例類.在第一次調(diào)用的時候?qū)嵗?/p>

public class Singleton2 {

//私有的默認(rèn)構(gòu)造子

private Singleton2() {}

//注意,這里沒有final

private static Singleton2 single=null;

//靜態(tài)工廠方法

public synchronized static Singleton2 getInstance() {

if (single == null) {

single = new Singleton2();

}

return single;

}

}

//對懶漢式單例的改進(錯誤的改進)

//實際上,只有在第一次創(chuàng)建對象的時候需要加鎖,之后就不需要了 ,這樣可以提升性能

public synchronized static Singleton2 getInstance() {

if (instance == null) {

synchronized(instance){ //鎖住當(dāng)前實例對象

if(instance == null){

instance = new Singleton2();

}

}

}

return instance;

}

錯誤原因:

aA、B線程同時進入了第一個if判斷

bA首先進入synchronized塊,由于instance為null,所以它執(zhí)行instance = new Singleton();

c由于JVM內(nèi)部的優(yōu)化機制,JVM先畫出了一些分配給Singleton實例的空白內(nèi)存,并賦值給instance成員(注意此時JVM沒有開始初始化這個實例),然后A離開了synchronized塊。

dB進入synchronized塊,由于instance此時不是null,因此它馬上離開了synchronized塊并將結(jié)果返回給調(diào)用該方法的程序。

e此時B線程打算使用Singleton實例,卻發(fā)現(xiàn)它沒有被初始化,于是錯誤發(fā)生了。

正確改進(使用內(nèi)部類):

JVM內(nèi)部的機制能夠保證當(dāng)一個類被加載的時候,這個類的加載過程是線程互斥的,JVM能夠幫我們保證instance只被創(chuàng)建一次,

并且會保證把賦值給instance的內(nèi)存初始化完畢,這樣我們就不用擔(dān)心上面的問題。

同時該方法也只會在第一次調(diào)用的時候使用互斥機制,這樣就解決了低性能問題

public?class?Singleton?{??

??

/*?私有構(gòu)造方法,防止被實例化?*/??

private?Singleton(){

}

/*?此處使用一個內(nèi)部類來維護單例?*/??

private?static?class?SingletonFactory?{??

private?static?Singleton?instance?=?new?Singleton();??

}

/*?獲取實例?*/??

public?static?Singleton?getInstance()?{??

return?SingletonFactory.instance;??

}

/*?如果該對象被用于序列化,可以保證對象在序列化前后保持一致?*/??

public?Object?readResolve()?{??

return?getInstance();??

}

}

其實說它完美,也不一定,如果在構(gòu)造函數(shù)中拋出異常,實例將永遠得不到創(chuàng)建,也會出錯????

第二種改進:

因為我們只需要在創(chuàng)建類的時候進行同步,所以只要將創(chuàng)建和getInstance()分開,

單獨為創(chuàng)建加synchronized關(guān)鍵字,也是可以的

public class Singleton {

private static Singleton instance=null;

private Singleton(){}

private static synchronized void Init(){

if(instance==null)

instance=new Singletion();

}

public static Singleton getInstance(){

if(instance==null){

Init();

}

return instance;

}

}

3.登記式單例類

import java.util.HashMap;

import java.util.Map;

//登記式單例類.

//類似Spring里面的方法,將類名注冊,下次從里面直接獲取。

public class Singleton3 {

private static MapString,Singleton3 map = new HashMapString,Singleton3();

static{

Singleton3 single = new Singleton3();

map.put(single.getClass().getName(), single);

}

//保護的默認(rèn)構(gòu)造子

protected Singleton3(){}

//靜態(tài)工廠方法,返還此類惟一的實例

public static Singleton3 getInstance(String name) {

if(name == null) {

name = Singleton3.class.getName();

System.out.println("name == null"+"---name="+name);

}

if(map.get(name) == null) {

try {

map.put(name, (Singleton3) Class.forName(name).newInstance());

} catch (InstantiationException e) {

e.printStackTrace();

} catch (IllegalAccessException e) {

e.printStackTrace();

} catch (ClassNotFoundException e) {

e.printStackTrace();

}

}

return map.get(name);

}

//一個示意性的商業(yè)方法

public String about() {

return "Hello, I am RegSingleton.";

}

public static void main(String[] args) {

Singleton3 single3 = Singleton3.getInstance(null);

System.out.println(single3.about());

}

}

網(wǎng)站標(biāo)題:java與設(shè)計模式源代碼 java開發(fā)設(shè)計模式
網(wǎng)頁路徑:http://muchs.cn/article6/hpheog.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營銷型網(wǎng)站建設(shè)網(wǎng)站維護、ChatGPT標(biāo)簽優(yōu)化、網(wǎng)站制作、做網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)