Android[高級教程] 設計模式之三 原型模式

上次說瞭兩種設計模式,這次我們說一下原型模式,原型模式其實理解也很簡單,就是一個原型,一個實現它自身的克隆。《西遊記》裡經常會出現真假唐僧,真假孫悟空這種事件,這裡我們就根據這個事件來說一下原型模式,首先做假的話必須具備真身自有的特點,(例:外觀,口音)這些特點也必須跟原來的一樣,才能讓人真假難分。我們接著上一個策略模式來實現原型模式,首先我們先定義一下悟空類:

[java] public class Wukong implements Person, Cloneable { 
 
    @Override 
    public String save() { 
 
        return "大徒弟孫悟空來救師傅"; 
    } 
 
    @Override 
    protected Object clone() { 
        try { 
            return super.clone(); 
        } catch (CloneNotSupportedException e) { 
            // TODO Auto-generated catch block  
            e.printStackTrace(); 
            return null; 
        } 
    } 
 

public class Wukong implements Person, Cloneable {

 @Override
 public String save() {

  return "大徒弟孫悟空來救師傅";
 }

 @Override
 protected Object clone() {
  try {
   return super.clone();
  } catch (CloneNotSupportedException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
   return null;
  }
 }

}這裡悟空就實現瞭自身的復制,即是克隆,對自身的類進行復制,這樣才能讓人真假難分啊,接下來就是調用瞭。

[java] public class XiyoujiActivity extends Activity { 
 
    private ListView listView; 
 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
 
        listView = (ListView) findViewById(R.id.listView1); 
         
        Tangseng tangseng = new Tangseng(); 
        Wukong wukong = new Wukong(); 
         
        ArrayList<String> lists = new ArrayList<String>(); 
        lists.add(tangseng.help(wukong)); 
        lists.add(tangseng.help((Person)wukong.clone())); 
 
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
                android.R.layout.simple_list_item_1, lists); 
         
        listView.setAdapter(adapter); 
 
    } 

public class XiyoujiActivity extends Activity {

 private ListView listView;

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

  listView = (ListView) findViewById(R.id.listView1);
  
  Tangseng tangseng = new Tangseng();
  Wukong wukong = new Wukong();
  
  ArrayList<String> lists = new ArrayList<String>();
  lists.add(tangseng.help(wukong));
  lists.add(tangseng.help((Person)wukong.clone()));

  ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
    android.R.layout.simple_list_item_1, lists);
  
  listView.setAdapter(adapter);

 }
}其他的類我們就借用瞭上一篇策略模式的類瞭,其他的沒有改變,這裡我們解釋一下,因為克隆的話返回的是對象,我們進行瞭強制轉換,將他返回特定的類型,這樣唐僧在呼救的時候假孫悟空也可以去救。

最後,最後運行的如圖:

 

摘自 kangkangz4的專欄

發佈留言