android應用開發設計模式之原型模式

下面我們來學習下原型模式

原型模式:用原型實例制定創建對象的種類,並且通過拷貝這些原型創建新的對象。

新建賽車的接口:

[java]
public interface car_interface { 
    public void start(); 
    public void stop(); 

public interface car_interface {
    public void start();
    public void stop();
}
[java]
新建寶馬汽車的實現類: 
新建寶馬汽車的實現類:[java]
<pre class="java" name="code">package com.jindegege.car; 
import com.jindegege.fitting.car_tyre; 
import com.jindegege.service.car_interface; 
 
 
    public class bmw_impl implements car_interface, Cloneable { 
        private car_tyre car_tyre_ref; 
        private bmw_impl bmw; 
        public void start() { 
            
 
        } 
 
        public void stop() { 
            
 
        } 
 
        public car_tyre getCar_tyre_ref() { 
            return car_tyre_ref; 
        } 
 
        public void setCar_tyre_ref(car_tyre car_tyre_ref) { 
            this.car_tyre_ref = car_tyre_ref; 
        } 
 
        @Override 
        public Object clone() throws CloneNotSupportedException { 
            super.clone(); 
            bmw = new bmw_impl(); 
            bmw.setCar_tyre_ref(new car_tyre()); 
 
            return bmw; 
        } 
 

<pre class="java" name="code">package com.jindegege.car;
import com.jindegege.fitting.car_tyre;
import com.jindegege.service.car_interface;

 public class bmw_impl implements car_interface, Cloneable {
     private car_tyre car_tyre_ref;
     private bmw_impl bmw;
     public void start() {
       

     }

     public void stop() {
       

     }

     public car_tyre getCar_tyre_ref() {
         return car_tyre_ref;
     }

     public void setCar_tyre_ref(car_tyre car_tyre_ref) {
         this.car_tyre_ref = car_tyre_ref;
     }

     @Override
     public Object clone() throws CloneNotSupportedException {
         super.clone();
         bmw = new bmw_impl();
         bmw.setCar_tyre_ref(new car_tyre());

         return bmw;
     }

}

新建寶馬的配件輪胎類在寶馬汽車實現類中需要註意的是將原來protected類型的clone方法要變成public,這樣才可以對外公開,可以被調用,將秘密公開化。

[java]
package com.jindegege.fitting; 
 
public class car_tyre { 
 
    private String name = "德國制造原版輪胎"; 
 
    public String getName() { 
        return name; 
    } 

package com.jindegege.fitting;

public class car_tyre {

    private String name = "德國制造原版輪胎";

    public String getName() {
        return name;
    }
}

新建android客戶端,給出xml以及activity:

[html]
<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 
 
    <TextView 
        android:id="@+id/textview01" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
         /> 
    <TextView 
        android:id="@+id/textview02" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        /> 
    <TextView 
        android:id="@+id/textview03" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        /> 
    <TextView 
        android:id="@+id/textview04" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        /> 
 
</LinearLayout> 
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textview01"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
         />
    <TextView
        android:id="@+id/textview02"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        />
    <TextView
        android:id="@+id/textview03"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        />
    <TextView
        android:id="@+id/textview04"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        />

</LinearLayout>[html]
下面是activity 
下面是activity
[java]
package com.jindegege.activity; 
 
import com.jindegege.car.bmw_impl; 
import com.jindegege.fitting.car_tyre; 
 
 
import android.app.Activity; 
import android.os.Bundle; 
import android.widget.TextView; 
import android.widget.Toast; 
 
public class PrototypeActivity extends Activity { 
   private bmw_impl bmw1; 
   private bmw_impl bmw2; 
   private TextView textview01; 
   private TextView textview02; 
   private TextView textview03; 
   private TextView textview04; 
    
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
        try { 
            textview01= (TextView)findViewById(R.id.textview01); 
            textview02=(TextView)findViewById(R.id.textview02); 
            textview03= (TextView)findViewById(R.id.textview03); 
            textview04=(TextView)findViewById(R.id.textview04); 
            bmw1 = new bmw_impl(); 
            bmw1.setCar_tyre_ref(new car_tyre()); 
            textview01.setText("我的寶馬參數是:" + bmw1); 
            textview02.setText("我的寶馬的輪胎參數是:" + bmw1.getCar_tyre_ref()); 
            bmw2 = (bmw_impl) bmw1.clone(); 
            textview03.setText("他人的寶馬的參數是:" + bmw2); 
            textview04.setText("他人的寶馬的參數是:" + bmw2); 
        } catch (CloneNotSupportedException e) { 
            // TODO Auto-generated catch block  
            e.printStackTrace(); 
        } 
         
    } 
 
 } 
package com.jindegege.activity;

import com.jindegege.car.bmw_impl;
import com.jindegege.fitting.car_tyre;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;

public class PrototypeActivity extends Activity {
   private bmw_impl bmw1;
   private bmw_impl bmw2;
   private TextView textview01;
   private TextView textview02;
   private TextView textview03;
   private TextView textview04;
  
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        try {
   textview01= (TextView)findViewById(R.id.textview01);
   textview02=(TextView)findViewById(R.id.textview02);
   textview03= (TextView)findViewById(R.id.textview03);
   textview04=(TextView)findViewById(R.id.textview04);
   bmw1 = new bmw_impl();
   bmw1.setCar_tyre_ref(new car_tyre());
   textview01.setText("我的寶馬參數是:" + bmw1);
   textview02.setText("我的寶馬的輪胎參數是:" + bmw1.getCar_tyre_ref());
   bmw2 = (bmw_impl) bmw1.clone();
   textview03.setText("他人的寶馬的參數是:" + bmw2);
   textview04.setText("他人的寶馬的參數是:" + bmw2);
  } catch (CloneNotSupportedException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
       
    }

 }
 
下面是效果圖:

 

源代碼下載地址:http://up.aiwalls.com/2012/0227/20120227113259940.rar

摘自 jindegegesun的專欄

發佈留言