Android Ap開發設計模式第四篇:Factory 方法模式

來源:互聯網
上載者:User

Factory Method Pattern
模板模式的衍生品?
  以Template Method Pattern 架構擷取產生對象執行個體的工廠就是Factory Method Pattern。

  Factory 方法模式在父類規定對象的建立方法,但並沒有深入到較具體的類名。所有具體的完整內容 都放在子類。根據這個原則,我們可以大致分成產生對象執行個體的大綱(架構)和實際生產對象執行個體的類兩方面。

 

情境類比
  以一個工廠進廠打工為原型,工人們進廠須先登記資訊,由所登記的資訊進入建立工卡,工人們每天進廠必須使用工卡打卡,開始一天的勞動。以此為例,進行編程,設計UML圖如下:


 

程式實現
 

  抽象類別Product定義抽象方法create ()表示建立用工card 資訊和use () 表示使用者使用card

  抽象類別Factory實現方法create 的抽象類別,這裡就是我們上文所說的為什麼是模板方法模式衍生品。和定義抽象方法createProduct()、抽象方法registerProduct() 交由子類負責完成 。

  類IDcard 繼承自Product 實現方法use 和create

  類IDCardFactory 繼承 自Factory 實現方法createProduct、registerProduct

 

 

  Product 抽象類別
 

public abstract class Product {
   
    public abstract String create();
   
    public abstract String use();
}
 

  Factory 抽象類別
 

public abstract class Factory {
    public final Product create(String owner) {
        Product p = createProduct(owner);
        registerProduct(p);
        return p;
    }

    protected abstract Product createProduct(String owner);

    protected abstract void registerProduct(Product product);
}
 

  IDCard 類
 

public class IDCard extends Product{

    private String owner;
   
   
    
    public IDCard(String owner) {
        // TODO Auto-generated constructor stub
 
        this.owner=owner;
    }
   
   
    @Override
    public String use() {
        // TODO Auto-generated method stub
        return "使用"+owner+"的卡";
    }
   
    public String getOwner(){
        return owner;
    }


    @Override
    public String create() {
        // TODO Auto-generated method stub
        return "建立 "+owner+"的卡";
    }
}
 

  IDCardFactory 類
 

public class IDCardFactory extends Factory{

    private Vector<String> owners=new Vector<String>();
   
   
   
    @Override
    protected Product createProduct(String owner) {
        // TODO Auto-generated method stub
        return new IDCard(owner);
    }

    @Override
    protected void registerProduct(Product product) {
        // TODO Auto-generated method stub
        owners.add(((IDCard)product).getOwner());
    }
   
    public Vector<String> getOwners(){
        return owners;
    }

}
 

介面代碼實現 FatoryMethodActivity:
 

public class FatoryMethodActivity extends Activity implements OnClickListener {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        ((Button) findViewById(R.id.Button01)).setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub

        Factory factory = new IDCardFactory();
        Product card1 = factory.create("terry");
        Product card2 = factory.create("paul");
        Product card3 = factory.create("jim");
        ((EditText) findViewById(R.id.EditText01)).setText(card1.create()+","
                + card1.use() + "" + card2.create() +","+ card2.use() + ""
                + card3.create() +","+ card3.use());
    }
}
 

最終實現效果:

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.