2017-02-17 104 views
0
public interface CPR { 
    double balance(); 
    void debit(double amount); 
    void charge(double amount); 
} 

public class Facile implements CPR { 
    private int number; 

    Facile(int number){ 
     this.number = number; 
    } 

    @Override 
    public double balance() { 
     // TODO Auto-generated method stub 
     return 0; 
    } 

    @Override 
    public void debit(double amount) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void charge(double amount) { 
     // TODO Auto-generated method stub 

    } 

} 

public class Gold implements CPR { 
    private int number; 

    Gold(int number) { 
     this.number = number; 
    } 

    @Override 
    public double balance() { 
     // TODO Auto-generated method stub 
     return 0; 
    } 

    @Override 
    public void debit(double amount) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void charge(double amount) { 
     // TODO Auto-generated method stub 

    } 

} 

public class Ecpr implements CPR{ 
    private int number; 

    Ecpr(int number){ 
     this.number = number; 
    } 

    @Override 
    public double balance() { 
     // TODO Auto-generated method stub 
     return 0; 
    } 

    @Override 
    public void debit(double amount) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void charge(double amount) { 
     // TODO Auto-generated method stub 

    } 

} 

實現以下客戶端。 私營企業和Puba。Java工廠方法

  • 當一個客戶端分配的CPR,和「創建並連接到CPR客戶端,其類型取決於客戶的類型: 目前的政策,對私人和」授予的悠遊卡,到一個企業,並'授予金卡給 組成公共行政和'分配卡E-CPR。
  • 每種類型的客戶可以有其特定的功能:在這三類的情況下,只是一個商業客戶有權 也支付實際剩餘的卡,付款交易引發其他客戶 一個錯誤(例外)在應付金額超過紙張可用性的情況下。在所有類型的客戶中,必須提供以下方法:
    1. getCPR(int number):this和'分配給其調用的客戶的方法CPR(該類型的預期類型客戶)號碼和'收到號碼;
    2. chargeCPR(雙重現金):用現金充值客戶的卡;
    3. payCPR(雙倍金額)支付客戶信用卡上的總金額,如果支付' 可能;
    4. cancelCPR(int newnumber):取消當前CPR,客戶並在其上被調用,用新號碼 CPR(相同類型)替換爲新號碼,並且在其上丟棄前者的遺產心肺復甦;
    5. writeInfo():打印客戶的數據,即其稅碼,其類型,並在客戶的卡上可用。

 

public abstract class Client { 
    private CPR card; 
    private int CF; 

    Client(int CF){ 
     this.CF = CF; 
    } 

    abstract CPR makeCPR(int number); 

    public void getCPR(int number){ 
     card = makeCPR(number); 
    } 

    public void chargeCPR(double amount){ 
     card.charge(amount); 
    } 

    public void payCPR(double amount) throws Exception{ 
    } 

    public void cancelCPR(int newnumber){ 
    } 

    public void writeInfo(){   
    } 
} 

我在落實擴展了客戶端的其他類困難。

例如,我會想到的私人課程如此實施它。

public class Private extends Client { 
    private CPR card; 

    Private(int CF) { 
     super(CF); 
     // TODO Auto-generated constructor stub 
    } 

    @Override 
    CPR makeCPR(int number) { 
     return new Facile(number); 
    } 

    public void payCPR(double amount) throws Exception{ 
     if (amount > card.balance()); 
    } 

    public void cancelCPR(int newnumber){ 
    } 

    public void writeInfo(){   
    } 

} 
+0

你有什麼樣的困難?你能否提供http://stackoverflow.com/help/mcve –

回答

0

如果我理解你的權利,你需要的Client繼承人將返回的CPR正確的實例。要解決它可以使用Generics

public abstract class Client<T extends CPR> { 
    private CPR card; 
    private int CF; 

    Client(int CF){ 
     this.CF = CF; 
    } 

    abstract T makeCPR(int number); 
    //.... 
} 

public class GoldClient extends Client<Gold> { 

    Gold makeCPR(int number) { 
     return new Gold(number); 
    } 

}