android應用開發設計模式之原型模式
阿新 • • 發佈:2018-12-30
原型模式:用原型例項制定建立物件的種類,並且通過拷貝這些原型建立新的物件。
新建賽車的介面:
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(); } } }
下面是效果圖: