java继承层次结构,在状态模式中实现继承层次结构 - java
我有一個與此非常相似的設計:
這里的NewOrder,Registered&Granted都有通用方法AddOrderline()和Cancel(),因此將這兩種方法重構為父類很容易。
當我要Cancel一條Shipped行(當前未在圖中顯示)時,會出現問題。
由于發運行不支持AddOrderline(),因此我需要將NewOrder的父類打破,將已注冊并授予的類分為2類,一類用于Cancel(),另一類用于AddOrderline()。
現在NewOrder必須擴展2個父類才能獲得2個函數。
筆記
這個例子非常簡化。我的實際應用程序大約有12個狀態。
該代碼使用PHP,但是歡迎使用C#或Java解決方案,因為我認為該解決方案將是相似的,因為它們都不支持多重繼承。
java參考方案
我會考慮將接口與實現分開。例如在Java中
interface Cancellable {
void cancel();
}
interface Shippable{
void ship();
}
等等
public class NewState implements Cancellable, Shippable {
public void cancel() { ... }
public void ship() { ... }
}
如果您有一個基礎私有國家,則它可以實現所有必需的接口,而您的公共國家只需要委派那些受支持的國家即可。例如
public class UnderlyingState implements Cancellable, Shippable ... {
public void cancel() { ... }
public void ship() { ... }
}
public class ShippableState implements Shippable {
private UnderlyingState ustate = new UnderlyingState();
public void cancel() {
// you can *only* cancel this
ustate.cancel();
}
}
在上面,您可能需要返回一個新的狀態對象(而不是void),并讓您的Order采用該新狀態。 UnderlyingState對象將強制執行某些狀態機。
令人頭疼的是,隨著狀態數量的增加,接口和實現也隨之增加。
java:繼承 - java
有哪些替代繼承的方法? java大神給出的解決方案 有效的Java:偏重于繼承而不是繼承。 (這實際上也來自“四人幫”)。他提出的理由是,如果擴展類未明確設計為繼承,則繼承會引起很多不正常的副作用。例如,對super.someMethod()的任何調用都可以引導您通過未知代碼的意外路徑。取而代之的是,持有對本來應該擴展的類的引用,然后委托給它。這是與Eric…Java-如何將此字符串轉換為日期? - java
我從服務器收到此消息,我不明白T和Z的含義,2012-08-24T09:59:59Z將此字符串轉換為Date對象的正確SimpleDateFormat模式是什么? java大神給出的解決方案 這是ISO 8601標準。您可以使用SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM…從方法返回數組-Java - java
private static Coordinate[] getCircleCoordintaes() { Coordinate coordinates[] = {new Coordinate(0, 0)}; return coordinates; } 以上程序工作正常。在上面的程序中,返回的坐標數組首先初始化了數組使用這條線Coordinate coordi…Java Swing SearchBox模型 - java
我需要使用Java Swing的搜索框,如果單擊任何建議,當輸入字母時它將顯示來自數據庫的建議,它將執行一些操作。如果有可能在Java swing中,請提供源代碼提前致謝 java大神給出的解決方案 您可以使用DefaultComboBoxModel,輸出將是這樣。Try this在此代碼中,您將找到countries數組,因此您需要從數據庫中獲取此數組。JAVA:如何檢查對象數組中的所有對象是否都是子類的對象? - java
我有一個對象數組?,F在,我要檢查所有這些對象是否都是MyObject的實例。有沒有比這更好的選擇:boolean check = true; for (Object o : justAList){ if (!(o instanceof MyObject)){ check = false; break; } } java大神給出的解決方案 如果您不喜歡循環,則…
總結
以上是生活随笔為你收集整理的java继承层次结构,在状态模式中实现继承层次结构 - java的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ueditor编辑器php上传配置,ph
- 下一篇: Oracle多租户体系,Oracle12