設計模式之Prototype——作業篇(原創)

設計模式之Prototype——作業篇<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

今年要交作業,可是由於我這幾天沉迷於CS之中,到現在還沒寫作業,這可該怎麼辦呢,誰都知道我們老師最討厭不寫作業的學生了。嘿嘿,還好我有一門優秀的技能,那就是——Clone大法(俗稱COPY大法),正是由於擁有該技能,才能使我殘酷的鬥爭中立於不敗之地。於是我以迅雷不及眼耳盜鈴之勢拿來了張三的作業,開始運功。

說道這裏就不得不先說說什麼叫Clone

有一個對象A,在某一時刻A中已經包含了一些有效值,此時可能會需要一個和A完全相同新對象B,並且此後對B任何改動都不會影響到A中的值,也就是說,AB是兩個獨立的對象,但B的初始值是由A對象確定的。

好了言歸正傳,讓我們開始吧。

 

1、在這裏,先定義一個拷貝作業(CopyHomeWork)接口:

public interface CopyHomeWork extends Cloneable{

  public String getHomeWork() ;

  public void setHomeWork(String homeWork);

}

2、再定義一個作業(HomeWork)的實現類:

public abstract class HomeWork implements CopyHomeWork{

  String homeWork;

 

  public void setHomeWork(String homeWork) {

    this.homeWork = homeWork;

  }

 

  public String getHomeWork() {

    return this.homeWork;

  }

 

// 典型的調用clone()代碼

  public Object clone() {

    Object object = null;

    try {

      object = super.clone();

    }

    catch (CloneNotSupportedException exception) {

      System.err.println("*** is not Cloneable");

    }

    return object;

  }

 

  public abstract void  DoHomeWork();  //做作業的抽象類

 

}

3、定義張三的作業(ZhangSanHomeWork)類:

public class ZhangSanHomeWork extends HomeWork{

 

  public void DoHomeWork() {

      System.out.println("張三作完了作業!");

  }

 

}

4、編寫測試類:

public class TestCopyHomeWork {

  public static void  main(String args[]){

    ZhangSanHomeWork zhangsanHomeWork = new ZhangSanHomeWork();

    HomeWork myHomeWork = (HomeWork)zhangsanHomeWork.clone();

    myHomeWork.DoHomeWork();

    myHomeWork.setHomeWork("我正在抄作業,請勿打擾!");

    System.out.println(myHomeWork.getHomeWork());

  }

}

5、說明:

A:定義:用原型實例指定創建對象的種類,並且通過拷貝這些原型創建新的對象。

BPrototype模式允許一個對象再創建另外一個可定製的對象,根本無需知道任何如何創建的細節,工作原理是:通過將一個原型對象傳給那個要發動創建的對象,這個要發動創建的對象通過請求原型對象拷貝它們自己來實施創建。

CPrototype模式最終演變成clone的使用。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章