欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

java設(shè)計模式代碼例題,java設(shè)計模式實例

JAVA 什么是設(shè)計模式,請舉例說明其中一個。

設(shè)計模式(Design Patterns)

專注于為中小企業(yè)提供網(wǎng)站建設(shè)、做網(wǎng)站服務(wù),電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)原州免費做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了成百上千家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。

——可復用面向?qū)ο筌浖幕A(chǔ)

設(shè)

計模式(Design

pattern)是一套被反復使用、多數(shù)人知曉的、經(jīng)過分類編目的、代碼設(shè)計經(jīng)驗的總結(jié)。使用設(shè)計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代

碼可靠性。

毫無疑問,設(shè)計模式于己于他人于系統(tǒng)都是多贏的,設(shè)計模式使代碼編制真正工程化,設(shè)計模式是軟件工程的基石,如同大廈的一塊塊磚石一樣。項目中合理的運用

設(shè)計模式可以完美的解決很多問題,每種模式在現(xiàn)在中都有相應的原理來與之對應,每一個模式描述了一個在我們周圍不斷重復發(fā)生的問題,以及該問題的核心解決

方案,這也是它能被廣泛應用的原因。

一、設(shè)計模式的分類

總體來說設(shè)計模式分為三大類:

創(chuàng)建型模式,共五種:工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式。

結(jié)構(gòu)型模式,共七種:適配器模式、裝飾器模式、代理模式、外觀模式、橋接模式、組合模式、享元模式。

行為型模式,共十一種:策略模式、模板方法模式、觀察者模式、迭代子模式、責任鏈模式、命令模式、備忘錄模式、狀態(tài)模式、訪問者模式、中介者模式、解釋器模式。

其實還有兩類:并發(fā)型模式和線程池模式。

例子:

單例模式(Singleton)

單例對象(Singleton)是一種常用的設(shè)計模式。在Java應用中,單例對象能保證在一個JVM中,該對象只有一個實例存在。這樣的模式有幾個好處:

1、某些類創(chuàng)建比較頻繁,對于一些大型的對象,這是一筆很大的系統(tǒng)開銷。

2、省去了new操作符,降低了系統(tǒng)內(nèi)存的使用頻率,減輕GC壓力。

3、有些類如交易所的核心交易引擎,控制著交易流程,如果該類可以創(chuàng)建多個的話,系統(tǒng)完全亂了。(比如一個軍隊出現(xiàn)了多個司令員同時指揮,肯定會亂成一團),所以只有使用單例模式,才能保證核心交易服務(wù)器獨立控制整個流程。

首先我們寫一個簡單的單例類:

[java] view plaincopy

public class Singleton {

/* 持有私有靜態(tài)實例,防止被引用,此處賦值為null,目的是實現(xiàn)延遲加載 */

private static Singleton instance = null;

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

private Singleton() {

}

/* 靜態(tài)工程方法,創(chuàng)建實例 */

public static Singleton getInstance() {

if (instance == null) {

instance = new Singleton();

}

return instance;

}

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

public Object readResolve() {

return instance;

}

}

java設(shè)計模式 觀察者模式 代碼

第一個

public interface RandomNumberListener {//接口

public void numberChanged(double d);

}

第二個

public class Consol implements RandomNumberListener{

@Override

public void numberChanged(double d) {

System.out.println(d);

}

}

第三個

public class SwingWindow

extends JFrame

implements RandomNumberListener{//觀察者

private JLabel label = new JLabel();

public SwingWindow(){

this.getContentPane().add( label);

this.setSize(300,200);

this.setVisible(true);

}

@Override

public void numberChanged(double d) {

label.setText(String.valueOf(d));

}

}

第四個

public class RandomNumber {//業(yè)務(wù)

private double r;

private ListRandomNumberListener listeners = new ArrayListRandomNumberListener();

//添加所有觀察者

public void addRandomNumberListener(RandomNumberListener lis){

listeners.add(lis);

}

public void random(){

r = Math.random();

//數(shù)據(jù)發(fā)生改變,通知所有的觀察者

for (RandomNumberListener lis : listeners) {

lis.numberChanged(r);

}

}

}

第五個

public class Test {

public static void main(String[] args) throws InterruptedException{

RandomNumber rn = new RandomNumber();

SwingWindow sw = new SwingWindow();

Consol c = new Consol();

rn.addRandomNumberListener(sw);

rn.addRandomNumberListener(c);

while(true){

rn.random();

Thread.sleep(new Random().nextInt(3000)+1000L);

}

}

}

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

.餓漢式單例類

//餓漢式單例類.在類初始化時,已經(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){ //鎖住當前實例對象

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)部的機制能夠保證當一個類被加載的時候,這個類的加載過程是線程互斥的,JVM能夠幫我們保證instance只被創(chuàng)建一次,

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

同時該方法也只會在第一次調(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è)計模式試題,請一定幫我做一下,實在不懂 200分!!!!

/**

*?@author?不落的太陽(Sean?Yang?aka?ShortPeace)

*?@version?1.0

*?@since?jdk?1.8

*?

*/

public?class?DecoratorFileWriter?extends?FileWriter?{

public?DecoratorFileWriter(String?fileName)?throws?IOException?{

super(fileName);

}

@Override

public?String?getEncoding()?{

return?super.getEncoding();

}

@Override

public?void?write(int?c)?throws?IOException?{

super.write(c);

}

@Override

public?void?write(char[]?cbuf,?int?off,?int?len)?throws?IOException?{

super.write(cbuf,?off,?len);

}

@Override

public?void?write(String?str,?int?off,?int?len)?throws?IOException?{

String?decoratorStr?=?str.replaceAll("?",?"");

super.write(decoratorStr,?off,?len);

}

@Override

public?void?flush()?throws?IOException?{

super.flush();

}

@Override

public?void?close()?throws?IOException?{

super.close();

}

@Override

public?void?write(char[]?cbuf)?throws?IOException?{

super.write(cbuf);

}

@Override

public?void?write(String?str)?throws?IOException?{

String?decoratorStr?=?str.replaceAll("?",?"");

super.write(decoratorStr);

}

@Override

public?Writer?append(CharSequence?csq)?throws?IOException?{

return?super.append(csq);

}

@Override

public?Writer?append(CharSequence?csq,?int?start,?int?end)?throws?IOException?{

return?super.append(csq,?start,?end);

}

@Override

public?Writer?append(char?c)?throws?IOException?{

return?super.append(c);

}

}

新聞標題:java設(shè)計模式代碼例題,java設(shè)計模式實例
網(wǎng)頁鏈接:http://chinadenli.net/article23/dsgcccs.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動態(tài)網(wǎng)站手機網(wǎng)站建設(shè)網(wǎng)站排名關(guān)鍵詞優(yōu)化網(wǎng)站營銷營銷型網(wǎng)站建設(shè)

廣告

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