日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Android >内容正文

Android

Android Ap 开发 设计模式第六篇:原型模式

發(fā)布時(shí)間:2023/12/9 Android 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android Ap 开发 设计模式第六篇:原型模式 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Prototype Pattern

名稱由來(lái)

  不是利用類來(lái)產(chǎn)生實(shí)例對(duì)象,而是從一個(gè)對(duì)象實(shí)例產(chǎn)生出另一個(gè)新的對(duì)象實(shí)例 ,根據(jù)被視為原型的對(duì)象實(shí)例 ,建立起的另一個(gè)新的對(duì)象實(shí)例就稱為原型模式(Ptototype Pattern)。

?

需求場(chǎng)景

?

  • 種類過(guò)多無(wú)法整合成類時(shí)
    第一種情形:若須處理的對(duì)象種類太多,如果要一個(gè)個(gè)設(shè)成不同的類,須產(chǎn)生大量的源程序文件
  • 不容易利用類產(chǎn)生對(duì)象實(shí)例時(shí)
    第二種情形:該對(duì)象的實(shí)例產(chǎn)生過(guò)程太復(fù)雜,很難利用類來(lái)建立。
  • 希望把框架和所產(chǎn)生的對(duì)象實(shí)例分開時(shí)
    第三種情形:希望讓產(chǎn)生對(duì)象實(shí)例時(shí)的框架不會(huì)只存在于某些特殊類時(shí)。

功能演示

?

  測(cè)試程序類結(jié)構(gòu)圖如下:

  模式UML圖中,共有三個(gè)類:

  • 接口,Product 己聲明抽象方法use 和 createClone的接口
  • 管理類,Manager 利用createClone 復(fù)制對(duì)象實(shí)例的類
  • 普通類,MessageBox 把字符串框起來(lái)use 的類,實(shí)現(xiàn)Product的createClone 和use 方法。

  Product 接口

?

public?interface?Product?extends?Cloneable{

????
public?abstract?String?use(String?s);
????
????
public?abstract?Product?createClone();
}

  有了Product 接口 ,才可能進(jìn)行復(fù)制。這個(gè)接口繼承java.lang.Cloneable 接口 ,利用clone 方法可自動(dòng)對(duì)實(shí)現(xiàn)此接口 的類進(jìn)行復(fù)制。

  use 方法是“使用”的部分,“使用”代表何種意義則需看子類的實(shí)現(xiàn)。

  createClone方法負(fù)責(zé)復(fù)制對(duì)象實(shí)例的部分。

  
Manager類

?

public?class?Manager?{

????
private?Hashtable<String,?Product>?showCase?=?new?Hashtable<String,?Product>();

????
public?void?register(String?name,?Product?proto)?{
????????showCase.put(name,?proto);
????}

????
public?Product?create(String?protoName)?{
????????Product?p?
=?showCase.get(protoName);
????????
return?p.createClone();
????}
}

  唯一跟其他類溝通的橋梁,負(fù)責(zé)添加和負(fù)責(zé)對(duì)象的實(shí)例。

?

  MessageBox類

?

public?class?MessageBox?implements?Product?{

????
private?char?decochar;

????
public?MessageBox(char?dechar)?{
????????
this.decochar?=?dechar;
????}

????@Override
????
public?Product?createClone()?{
????????
//?TODO?Auto-generated?method?stub
????????Product?p?=?null;
????????
try?{
????????????p?
=?(Product)?clone();
????????}?
catch?(CloneNotSupportedException?e)?{
????????????
//?TODO:?handle?exception
????????????e.printStackTrace();
????????}

????????
return?p;
????}

????@Override
????
public?String?use(String?s)?{
????????
//?TODO?Auto-generated?method?stub
????????int?length?=?s.getBytes().length;
????????StringBuffer?sb?
=?new?StringBuffer();
????????
for?(int?i?=?0;?i?<?length?+?4;?i++)?{
????????????sb.append(decochar);
????????}
?
????????sb.append(decochar?
+?"\n\""?+?s?+?"\"\n"?+?decochar);

????????
for?(int?i?=?0;?i?<?length?+?4;?i++)?{
????????????sb.append(decochar);
????????}
????????sb.append(
"");
????????
return?sb.toString();

????}

}

?

  createClone 方法是復(fù)制本身的方法,這里所調(diào)用的clone 方法規(guī)定在java 語(yǔ)言規(guī)格內(nèi),它會(huì)產(chǎn)生另一個(gè)分身(本身的復(fù)制品)。在產(chǎn)生復(fù)制品時(shí),若該字段包含對(duì)象實(shí)例,則其值也會(huì)跟著復(fù)制到新的對(duì)象實(shí)例。能利用clone 方法進(jìn)行復(fù)制的只限于實(shí)現(xiàn)java.lang.Cloneable 接口 的類。如無(wú)實(shí)現(xiàn)則會(huì)報(bào)異常。但MessageBox 本身實(shí)現(xiàn)了Product ,而Product 是己經(jīng)繼承了Cloneable接口。

  Java 語(yǔ)言的clone 方法只能從本身的類(含子類)調(diào)用,所以如果是其他類的要求而進(jìn)行復(fù)制時(shí),則須另以其他方法(如createClone)把clone 抓起來(lái)。

?

  android 界面入口測(cè)試該原型 Prototype 的PrototypeActivity

?

public?class?PrototypeActivity?extends?Activity?{
????
/**?Called?when?the?activity?is?first?created.?*/
????@Override
????
public?void?onCreate(Bundle?savedInstanceState)?{
????????super.onCreate(savedInstanceState);
????????setContentView(R.layout.main);

????????((Button)?findViewById(R.id.Button01))
????????????????.setOnClickListener(
new?OnClickListener()?{

????????????????????@Override
????????????????????
public?void?onClick(View?v)?{
????????????????????????
//?TODO?Auto-generated?method?stub

????????????????????????Manager?manager?
=?new?Manager();

????????????????????????MessageBox?messageBox?
=?new?MessageBox('*');
????????????????????????manager.register(
"prototype",?messageBox);

????????????????????????Product?product?
=?manager.create("prototype");
????????????????????????((EditText)?findViewById(R.id.EditText01))
????????????????????????????????.setText(product.use(
"android?ap?Pattern"));
????????????????????}
????????????????});
????}
}

?

運(yùn)行效果如下:

?

源碼下載:

原型模式

?

 再發(fā)個(gè)求職信息:

  求職android(可勝任Framework及 以上工作。一年半經(jīng)驗(yàn)) 、Windows Phone 7(軟件、XNA) 開發(fā)工作。

?







?本文轉(zhuǎn)自 terry_龍 51CTO博客,原文鏈接:http://blog.51cto.com/terryblog/612359,如需轉(zhuǎn)載請(qǐng)自行聯(lián)系原作者

總結(jié)

以上是生活随笔為你收集整理的Android Ap 开发 设计模式第六篇:原型模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。