android应用开发设计模式之原型模式
2909 点击·0 回帖
![]() | ![]() | |
![]() | 下面我们来学习下原型模式 原型模式:用原型实例制定创建对象的种类,并且通过拷贝这些原型创建新的对象。 新建赛车的接口: [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(); } } } 下面是效果图: ![]() | |
![]() | ![]() |