1. ? 在 java 程序中 , 對象可以被顯式地或者隱式地創(chuàng)建?
?????? 1.1顯 式的創(chuàng)建對象的方式
??????? A. 用 new 語句創(chuàng)建對象
??????? B. 運(yùn)用反射手段 , 調(diào)用 java.lang.Class 或者 java.lang.reflect.Constructor 類的 newInstance() 實(shí)
?????????? 例方法
??????? C. 調(diào)用對象的 clone() 方法
??????? D. 運(yùn)用序列化手段 , 調(diào)用 java.io.ObjectInputStream 對象的 readObject() 方法 .
????? 1.2隱式 建對象的方式
??????? A. String a= "hello"; 這種屬于 String 類型直接對應(yīng)一個 String 對象,引用一個 String 對象。若此時運(yùn)行 String b="hello"; 則 a 和 b 是同一個對象。
??????? B. String 中 + 的使用。
??????? C. JVM 加載一個類的時候,會隱含創(chuàng)建描述這個類的 Class 實(shí)例。
2 .顯示創(chuàng)建中各種方式的用途及優(yōu)缺點(diǎn)?
?? 2.1 用 new 語句創(chuàng)建對象:
如果構(gòu)造方法中有參數(shù),當(dāng)使用這種方式寫程序時不利于擴(kuò)展參數(shù),擴(kuò)展時會導(dǎo)致多出修改
?? 2.2 運(yùn)用反射手段
此方法可以幫助減少 if-else 語句
?? 2.3 clone 方法
???? ? 對應(yīng)了創(chuàng)建型模式的 prototype 模式,用于克隆一個具有同樣屬性的對象出來
????? 注意深度 clone 的實(shí)現(xiàn)
?? 2.4 運(yùn)用序列化手段
????? 還沒使用過
3. ? 根據(jù)對象的復(fù)雜性使用不同的設(shè)計(jì)模式漸進(jìn)的實(shí)現(xiàn)對象的構(gòu)造?
3.1Singleton 模式
??? 保證一個類僅有一個實(shí)例,應(yīng)提供一個訪問它的全局訪問點(diǎn)
有些對象是需要計(jì)劃生育的,如太陽。
Singleton 的實(shí)現(xiàn)方式有餓漢式和懶漢式兩種
餓漢式代碼:
?? ??????? public class Sun{
? ???? ??? private static final Sun uniqueInstance = new Sun();
? ???? ??? private Sun(){}
? ???? ??? public static Sun getInstance(){
??? ???? ? ??? return? ? uniqueInstance ;
? ???? ??? }
}
懶漢式代碼:
public class Sun {
? private static Sun? ? uniqueInstance ;
? private Sun(){}
? public static Sun ?getInstance(){
??? if ( uniqueInstance == null ){
????? synchronized (Sun. class ){
??????? if ( uniqueInstance == null ){
? ? ? ? ?? uniqueInstance = new Sun();
??????? }
????? }
??? }
??? return? ? uniqueInstance ;
? }
}
3.2 prototype 原型模式 (clone)
??? 用原型實(shí)例指定創(chuàng)建對象的種類,并且通過拷貝這些原型創(chuàng)建新的對象。
?? 有時創(chuàng)建的對象要求和已有對象完全一樣,如個人簡歷
?? 此模式分為淺復(fù)制和深復(fù)制
?? 淺復(fù)制:復(fù)制出的對象的所有原型變量都與原來的對象具有相同的值,而所有的其他對象引用的變量都仍然指向原來的對象。
?? ?????????? public class Resume implements Cloneable {
??? ??? ? private String name ;
??? ????? private int age ;
?
??? ?????? @Override
??? ?????? public Resume clone() throws CloneNotSupportedException {
?????? ????? Resume message = (Resume) super .clone();
?????? ????? return message;
??? ?????? }
}
????????? 深復(fù)制:將對象中的引用型變量也復(fù)制出來
???????????????? ? public class Resume implements Cloneable {
??? ?????? ? private User user ;
??? ?????? ? @Override
??? ?????? ? public Resume clone() throws CloneNotSupportedException {
?????? ??? ? ?? Resume message = (Resume) super .clone();
?????? ??? ? ?? if ( this . user != null ) {
?????????? ??? ??? message. user = this . user .clone();
?????? ???? ??? }
?????? ???? ??? return message;
??? ?????? ? ? ? }
}
?? 3.3 Factory 工廠模式
????? ???? 此模式又分為三個子模式:簡單工廠模式、工廠方法模式、抽象工廠模式。他們因要創(chuàng)造的對象的復(fù)雜程度不同而漸進(jìn)變化。
????????? 簡單工廠模式:這好比個人的作坊,生產(chǎn)的產(chǎn)品比較簡單
????????? 生產(chǎn)蘋果的例子
???????????????? ? public class AppleFactory {
??? ??? ??? ? public static Apple getApple() {
?????? ??? ? ? Apple apple = new Apple();
?????? ??? ? ? return apple;
??? ?????? ? }
?
??? ??????? ? private AppleFactory() {
??? ??????? ? }
}
工廠方法:此時生產(chǎn)的為統(tǒng)一接口且不同實(shí)現(xiàn)的產(chǎn)品。工廠有個接口,生產(chǎn)的產(chǎn)品也有個接口,每種具體的產(chǎn)品對應(yīng)一個具體工廠
抽象工廠:此時生產(chǎn)的產(chǎn)品為相互依賴的、有一定關(guān)聯(lián)的多種產(chǎn)品。工廠有個接口,每個工廠都對應(yīng)生產(chǎn)出這些相互依賴的產(chǎn)品。
? ? ? ? 3.4 Builder 建造者模式
?????????? ? ??? 此模式創(chuàng)造的是一個復(fù)雜的對象,達(dá)到對象的構(gòu)建與它的表示相分離,使得同樣的
????????? 構(gòu)建過程可以創(chuàng)建出不同的表示。
?????????????? 看圖說話:
???????????? 模式中有個指揮員,指揮具體的建造者建超產(chǎn)品,最有建造者通過 getResult() ? 獲取產(chǎn)品
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
