灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:2479回复:0

android应用开发设计模式之原型模式

楼主#
更多 发布于:2012-09-06 13:42


下面我们来学习下原型模式
原型模式:用原型实例制定创建对象的种类,并且通过拷贝这些原型创建新的对象。
新建赛车的接口:
[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();
  }
      
    }
}

下面是效果图:





喜欢0 评分0
游客

返回顶部