下面我們來學習下原型模式
原型模式:用原型執行個體制定建立對象的種類,並且通過拷貝這些原型建立新的對象。
建立賽車的介面:
[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://www.bkjia.com/uploadfile/2012/0227/20120227113259940.rar
摘自 jindegegesun的專欄