java代碼詳細設(shè)計 java代碼示例

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

.餓漢式單例類

十年專注成都網(wǎng)站制作,企業(yè)網(wǎng)站建設(shè),個人網(wǎng)站制作服務(wù),為大家分享網(wǎng)站制作知識、方案,網(wǎng)站設(shè)計流程、步驟,成功服務(wù)上千家企業(yè)。為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁設(shè)計及定制高端網(wǎng)站建設(shè)服務(wù),專注于企業(yè)網(wǎng)站建設(shè),高端網(wǎng)頁制作,對濕噴機等多個行業(yè),擁有多年的營銷推廣經(jīng)驗。

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

public class Singleton1 {

//私有的默認構(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 {

//私有的默認構(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);

}

//保護的默認構(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());

}

}

求解答以下的java源代碼,詳細點,說明這個程序的設(shè)計思路,還有比如運用了多線程的話運用了多線程的什么

import java.awt.*;

import java.awt.event.*;

import java.util.Random;

import javax.swing.Timer;

public class PinBall

{

private final int TABLE_WIDTH = 300;//桌面寬度

private final int TABLE_HEIGHT = 400;//桌面高度

private final int RACKET_Y = 340;//球拍的垂直位置

private final int RACKET_HEIGHT = 20;//球拍高度

private final int RACKET_WIDTH = 60;//球拍寬度

private final int BALL_SIZE = 16;//球的大小

private Frame f = new Frame("彈球游戲");//實例化一個窗口

Random rand = new Random();//實例化一個隨機數(shù)生成器

private int ySpeed = 10;//小球的縱向運動數(shù)度、

private double xyRate = rand.nextDouble() - 0.5;//返回一個-0.5到0.5之間的比率用控制小球運動方向

private int xSpeed = (int)(ySpeed*xyRate*2);//這個橫向速度在-10到10之間,產(chǎn)生左右擺動運動效果

private int ballX = rand.nextInt(200)+20;//小球開始的橫坐標(biāo)位置,200表示產(chǎn)生0到100之間的隨機數(shù)

private int ballY = rand.nextInt(10)+20;//小球開始的縱坐標(biāo)位置

private int racketX = rand.nextInt(200);//球拍開始時的橫坐標(biāo)位置

private MyCanvas tableArea = new MyCanvas();//實力化一個畫布工具,集成Canvas類

private String shape = "";//保存需要繪制圖形的字符串屬性

Timer timer;//聲明一個時間變量

private boolean isLose = false;//表示游戲是否結(jié)束

public void init()

{

tableArea.setPreferredSize(new Dimension(TABLE_WIDTH,TABLE_HEIGHT));//定義畫布大小

f.add(tableArea);//添加畫布到窗口

KeyAdapter keyProcessor = new KeyAdapter()//實例化一個鍵盤監(jiān)聽事件適配器

{

public void keyPressed(KeyEvent ke)//重寫適配器里面的按下某鍵盤方法

{

if(ke.getKeyCode()==KeyEvent.VK_LEFT)//按下鍵盤左鍵時

{

if(racketX 0)//球拍左邊框不能出畫布的左邊框

racketX -=10;//按一左鍵次向左移動10個像素

}

if(ke.getKeyCode()==KeyEvent.VK_RIGHT)//按下鍵盤右鍵時

{

if(racketX TABLE_WIDTH - RACKET_WIDTH)//球拍右邊框不能出畫布的右邊框

racketX +=10;//按一次右鍵移動向右移動10個像素

}

}

};

f.addKeyListener(keyProcessor);//給窗口添加鍵盤監(jiān)聽器

tableArea.addKeyListener(keyProcessor);//給畫布添加鍵盤監(jiān)聽器

ActionListener taskPerformer = new ActionListener()//這里是實例化了一個監(jiān)聽接口,這個接口里面只有一個方法

{

public void actionPerformed(ActionEvent evt)//重寫這個接口里面的方法,判斷小球的位置

{

if(ballX=0 || ballX=TABLE_WIDTH-BALL_SIZE)//保證小球橫向上在畫布之內(nèi)運動

{

xSpeed = -xSpeed;//觸發(fā)反方向運動

}

if(ballY=RACKET_Y-BALL_SIZE(ballXracketX||ballXracketX+RACKET_WIDTH))//出了球拍的可擊打范圍

{

timer.stop();//停止對監(jiān)聽器的觸發(fā)

isLose=true;//將標(biāo)志isLose變量置為true

tableArea.repaint();//調(diào)用畫布的重繪方法

}

else if(ballY=0||(ballY=RACKET_Y-BALL_SIZEballYracketXballX=racketX+RACKET_WIDTH))//小球在球拍之內(nèi),而其到達球拍的高度

{

ySpeed=-ySpeed;//上下方向改變,小球反彈

}

ballY+=ySpeed;//小球的坐標(biāo)在縱向上增加

ballX+=xSpeed;//小球的坐標(biāo)在橫向上的增加

tableArea.repaint();//調(diào)用畫布的重繪方法3

}

};

timer = new Timer(100,taskPerformer);//每隔0.1秒運行一次監(jiān)聽器

timer.start();//計時器開始運行

f.addWindowListener(new MyListener());//關(guān)閉窗口事件

f.pack();//設(shè)置窗口最佳大小

f.setVisible(true);//顯示窗口

}

class MyListener extends WindowAdapter//關(guān)閉窗口的類

{

public void windowClosing(WindowEvent e)

{

System.exit(0);

}

}

public static void main(String[] args)//程序入口

{

new PinBall().init();//調(diào)用PinBall類里面的init()方法

}

class MyCanvas extends Canvas//建一個集成Canvas類的類

{

public void paint(Graphics g)//重寫父類的繪圖方法

{

if(isLose)//如果isLose為真,則在畫布里打印“游戲已結(jié)束”

{

g.setColor(new Color(255,0,0));//當(dāng)前顏色

g.setFont(new Font("黑體",Font.BOLD,30));//字體名稱,樣式,大小

g.drawString("游戲已結(jié)束!",50,200);//按坐標(biāo)繪制文字圖形

}

else//負責(zé)

{

g.setColor(new Color(240,240,80));//當(dāng)前顏色

g.fillOval(ballX,ballY,BALL_SIZE,BALL_SIZE);//填充顏色,根據(jù)坐標(biāo)和長寬填充圓形

g.setColor(new Color(80,80,200));//當(dāng)前顏色

g.fillRect(racketX,RACKET_Y,RACKET_WIDTH,RACKET_HEIGHT);//填充顏色,根據(jù)坐標(biāo)和長寬填充矩形

}

}

}

}

java通訊錄管理系統(tǒng)設(shè)計代碼怎么編譯

java編寫這個通訊錄管理系統(tǒng)

java編寫這個通訊錄管理系統(tǒng)_Java如何實現(xiàn)通訊錄管理系統(tǒng)

咕嚕嚕在芬蘭

原創(chuàng)

關(guān)注

3點贊·2305人閱讀

Java如何實現(xiàn)通訊錄管理系統(tǒng)

發(fā)布時間:2020-07-28 09:39:42

來源:億速云

閱讀:65

作者:Leah

這篇文章將為大家詳細講解有關(guān)Java如何實現(xiàn)通訊錄管理系統(tǒng),文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。

本文實例為大家分享了java實現(xiàn)通訊錄管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下

完成項目的流程:

1.根據(jù)需求,確定大體方向

2.功能模塊分析

3.界面實現(xiàn)

4.功能模塊設(shè)計

5.coding

6.代碼測試

下面是源代碼:import java.awt.Container;

import java.awt.GridLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.BufferedReader;

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

import java.util.ArrayList;

import java.util.Scanner;

import java.util.concurrent.SynchronousQueue;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.WindowConstants;

import javax.swing.text.html.HTMLDocument.Iterator;

class Infro{

public String id;

public String name;

public String sex;

public String address;

public String e_mail;

public String phoneNumber;

static int index = 0;

static ArrayList list = new ArrayList();

static int len = list.size();

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

public Infro(String id,String name,String sex,String address,String e_mail,String phoneNumber){

this.id = id;

this.name = name;

this.sex = sex;

this.address = address;

this.e_mail = e_mail;

this.phoneNumber = phoneNumber;

}

public String toString(){

return "編號:"+id+" 姓名:"+name+" 性別:"+sex+" 通訊地址:"+address+" 郵箱地址:"+e_mail+" 電話:"+phoneNumber;

}

/**

* 添加功能

**/

public static void addFunction(){//添加功能

Infro infro = new Infro("","","","","","");

System.out.println("請輸入添加的數(shù)據(jù):");

Scanner in = new Scanner(System.in);

System.out.println("輸入編號:");

infro.id = in.next();

System.out.println("輸入姓名:");

infro.name = in.next();

System.out.println("輸入性別:");

infro.sex = in.next();

System.out.println("輸入通訊地址:");

infro.address = in.next();

System.

out.println("輸入郵箱地址:");

infro.e_mail = in.next();

System.out.println("輸入電話:");

infro.phoneNumber = in.next();

list.add(index,infro);

index++;

if(list.isEmpty()){

System.out.println("數(shù)據(jù)添加失敗啦");

}else{

System.out.println("數(shù)據(jù)添加成功啦");

len++;//list集合長度加一

// System.out.println(list.get(0).toString());

}

}

// public static void deleteFunction(){//刪除功能

// System.out.println("輸入要刪除的聯(lián)系人的編號");

// Scanner in_2 = new Scanner(System.in);

// String d1 = in_2.nextLine();

// for(int a= 0; a

// if(d1.equals(list.get(a).id)){

// list.remove(list.get(a));

// len --;

// }

// }

// }

/**

* 刪除功能

**/

public static void deleteFunction(){

System.out.println("輸入要刪除的聯(lián)系人的編號");

Scanner in_2 = new Scanner(System.in);

String d1 = in_2.nextLine();

java.util.Iterator it = list.iterator();

while (it.hasNext()){

Infro infro = it.next();

if (infro.id.equals(d1)){

it.remove();

--index;//一定要加這個,否則當(dāng)做了刪除操作再做添加操作的時候會出現(xiàn)異常(類似于指針,棧)

System.out.println("刪除完畢"+"此時通訊錄記錄條數(shù)為:" + --len);

}

}

}

/**

* 修改功能

**/

public static void reditFunction(){

System.out.println("輸入要修改的通訊錄的Id");

Scanner in_r = new Scanner(System.in);

String r1 = in_r.nextLine();

for(int a = 0; a len;a++){

if(r1.equals(list.get(a).id)){

System.out.println("輸入修改后的姓名:");

String name_1 = in_r.next();

list.get(a).name = name_1;

System.out.println("輸入修改后的性別:");

String sex_1 = in_r.next();

list.get(a).sex = sex_1;

System.out.println("輸入修改后的通訊地址:");

String address_1 = in_r.next();

list.get(a).address = address_1;

System.out.println("輸入修改后的郵箱地址:");

String e_mail_1 = in_r.next();

list.get(a).e_mail = e_mail_1;

System.out.println("輸入修改后的電話:");

String phoneNumber_1 = in_r.next();

list.get(a).phoneNumber = phoneNumber_1;

System.out.println("數(shù)據(jù)修改完畢");

}

}

}

/**

* 查詢功能

**/

public static void searchFunction() throws Exception{//查詢功能

System.out.println("請輸入要查詢的姓名:");

Scanner in_1 = new Scanner(System.in);

String s1=in_1.nextLine();

for(int a= 0; a

if(s1.equals(list.get(a).name)){

System.out.println(list.get(a).toString());

}

}

}

/**

* 顯示功能

**/

public static void showFunction(){

for(int i = 0 ;i

System.out.println(list.get(i).toString());

}

}

/**

* 保存功能

**/

public static void writeFunction() throws IOException{

FileWriter writer = new FileWriter("通訊錄管理.txt");

for(int i = 0 ;i

String []strwriter = new String[len];

strwriter[i]=list.get(i).toString();

writer.write(strwriter[i]);

writer.write("\r\n");

System.out.println("成功寫入一行數(shù)據(jù)到 通訊錄管理.txt 中");

}

writer.close();//關(guān)閉寫入流,釋放資源

}

/**

* 讀取功能

**/

public static void readFunction() throws IOException{

FileReader reader = new FileReader("通訊錄管理.txt");

BufferedReader br = new BufferedReader(reader);

String str;

while((str = br.readLine()) != null){//每次讀取一行文本,判斷是否到達文件尾

System.out.println(str);

}

br.close();

}

}

public class Demo extends JFrame {

/**

* 界面設(shè)計

**/

public Demo(){

Container c = getContentPane(); //定義一個頂級容器c

JPanel jp = new JPanel(); //新建JPanel面板--jp

JButton button1 = new JButton("新建聯(lián)系人");

JButton button2 = new JButton("刪除聯(lián)系人");

JButton button3 = new JButton("編輯聯(lián)系人");

JButton button4 = new JButton("查找聯(lián)系人");

JButton button5 = new JButton("顯示所有聯(lián)系人");

JButton button6 = new JButton("保存聯(lián)系人到本地");

JButton button7 = new JButton("讀取本地聯(lián)系人");

jp.setLayout(new GridLayout(2,4,5,5));//新建網(wǎng)格布局管理器(行數(shù),列數(shù),組件間的水平垂直間距)

jp.add(button1);

jp.add(button2);

jp.add(button3);

jp.add(button4);

jp.add(button5);

jp.add(button6);

jp.add(button7);

c.add(jp);//將JPanel面板jp添加到頂級容器c中

setSize(600,500);

setTitle("*通 訊 錄 管 理 系 統(tǒng)*");

setVisible(true);

setResizable(false);//窗體大小由程序員決定,用戶不能自由改變大小

setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

/**

*按鍵響應(yīng)

*

**/

button1.addActionListener(new ActionListener(){//添加功能實現(xiàn)

public void actionPerformed(ActionEvent arg0){

Infro.addFunction();

}

});

button2.addActionListener(new ActionListener(){//刪除功能實現(xiàn)

public void actionPerformed(ActionEvent arg0){

Infro.deleteFunction();

}

});

button3.addActionListener(new ActionListener(){//修改功能實現(xiàn)

public void actionPerformed(ActionEvent arg0){

Infro.reditFunction();

}

});

button4.addActionListener(new ActionListener(){//查詢功能實現(xiàn)

public void actionPerformed(ActionEvent arg0){

try {

Infro.searchFunction();

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

});

button5.addActionListener(new ActionListener(){//顯示功能實現(xiàn)

public void actionPerformed(ActionEvent arg0){

Infro.showFunction();

}

});

button6.addActionListener(new ActionListener(){//保存功能實現(xiàn)

public void actionPerformed(ActionEvent arg0){

try {

Infro.writeFunction();

} catch (IOException e) {

e.printStackTrace();

}

}

});

button7.addActionListener(new ActionListener(){//讀取功能實現(xiàn)

public void actionPerformed(ActionEvent arg0){

try {

Infro.readFunction();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

});

}

public static void main(String[] args) {

// TODO Auto-generated method stub

new Demo();

Infro a = new Infro("", "", "", "", "", "");

}

}

關(guān)于Java如何實現(xiàn)通訊錄管理系統(tǒng)就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

本文名稱:java代碼詳細設(shè)計 java代碼示例
瀏覽地址:http://bm7419.com/article44/dohjjhe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、外貿(mào)建站App設(shè)計、網(wǎng)站制作、App開發(fā)

廣告

聲明:本網(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)

外貿(mào)網(wǎng)站制作