寫乙個商品結算程式:
public class program
// 獲取實際打折率
float rangarr = new float;
float total = 0f;
string rangstr = "不打折";
try
} catch (exception e)
system.out.println("總計:" + rangstr + "後 " + total);
}}
問題來了:「這樣子增加乙個演算法,就更改一下**,又不利於其他演算法的保密,也不符合物件導向的三大特性」。
我:想起了上次的優化,使用簡單工廠設計模式改進一次。
public class program ;
double total = 0f;
try catch (exception e)
system.out.println("總計:" + rang + "後 " + total);
}}abstract class cashsuper
// 正常收費
class cashnormal extends cashsuper
}// 打折收費
class cashrebate extends cashsuper
@override
public double acceptcash(double money)
}// 滿多少返利
class cashreturn extends cashsuper
@override
public double acceptcash(double money)
return result;
}}class cashfactory
return cash;
}}
問題來了:「上面每增加乙個演算法都要更改工廠模式,重複利用**少了,有沒有更好的的設計模式呢」,最終找到了策略設計模式
public class program ;
double total = 0f;
cashcontext cash = null;
try
total = cash.getresult(double.parsedouble(price) * double.parsedouble(number)) ;
} catch (exception e)
system.out.println("總計:" + rang + "後 " + total);
}}abstract class cashsuper
// 正常收費
class cashnormal extends cashsuper
}// 打折收費
class cashrebate extends cashsuper
@override
public double acceptcash(double money)
}// 滿多少返利
class cashreturn extends cashsuper
@override
public double acceptcash(double money)
return result;
}}class cashcontext
public double getresult(double money)
}
仔細看了,這不是又回到了起點,還多封裝了一次。重複**更多了。又改如何改進?
策略與簡單工廠模式的結合
public class program ;
double total = 0f;
try catch (exception e)
system.out.println("總計:" + rang + "後 " + total);
}}abstract class cashsuper
// 正常收費
class cashnormal extends cashsuper
}// 打折收費
class cashrebate extends cashsuper
@override
public double acceptcash(double money)
}// 滿多少返利
class cashreturn extends cashsuper
@override
public double acceptcash(double money)
return result;
}}class cashcontext
}public double getresult(double money)
}
簡單工廠模式和策略簡單工廠模式的比較
簡單工廠模式
cashsuper cash = cashfactory.createcash(rang);
total = cash.acceptcash(double.parsedouble(price) * double.parsedouble(number)) ;
策略工廠模式
cashcontext cash = new cashcontext(rang);
total = cash.getresult(double.parsedouble(price) * double.parsedouble(number)) ;
簡單工廠模式呼叫者需要認識兩個類,cashsuper和cashfactory,而策略工廠模式只要認識cashcontext乙個類。耦合程度更加降低 小菜成長記 八 介面卡模式
寫乙個球員進攻程式 public class program 球員 abstract class player public abstract void attack public abstract void defense 前鋒 class forwards extends player over...
大話設計模式(二)策略模式 簡單工廠
定義了演算法,分別封裝起來,讓他們之間可以相互替換,此模式讓演算法的變化不會影響到使用演算法的使用者 定義乙個抽象的父類,包含乙個抽象的演算法amethod public abstract class strategy a類用a的實現去實現演算法a public class concretestra...
大話設計模式 工廠模式 策略模式
工廠模式 以商場收費系統為例。打折 正常 送積分等手段 首先,有乙個抽象類cashsuper 收費操作,有三個繼承cashsuper的子類 cashnormal具體操作,重寫函式 其次,寫乙個cashfactory工廠類,來生產具體的操作類cashnormal等。策略模式 先寫乙個策略抽象類,然後寫...