1. 程式人生 > >android應用開發設計模式之原型模式

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

原型模式:用原型例項制定建立物件的種類,並且通過拷貝這些原型建立新的物件。
新建賽車的介面:

public interface car_interface {
 	public void start();
 	public void stop();
}

新建寶馬汽車的實現類:

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,這樣才可以對外公開,可以被呼叫,將祕密公開化。

public class car_tyre {

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

	public String getName() {
		return name;
	}
}

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

<?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>

下面是activity

public class PrototypeActivityextends 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) {
			e.printStackTrace();
		}

	}

}

下面是效果圖: