UML關(guān)系簡(jiǎn)單介紹
UML簡(jiǎn)單使用的介紹
創(chuàng)建型設(shè)計(jì)模式
Android設(shè)計(jì)模式-單例模式
Android設(shè)計(jì)模式-工廠模式
Android設(shè)計(jì)模式-抽象工廠模式
Android設(shè)計(jì)模式-建造者模式
Android設(shè)計(jì)模式-原型模式
結(jié)構(gòu)型設(shè)計(jì)模式
Android設(shè)計(jì)模式-代理模式
Android設(shè)計(jì)模式-裝飾模式
Android設(shè)計(jì)模式-適配器模式
Android設(shè)計(jì)模式-組合模式
Android設(shè)計(jì)模式-門(mén)面模式
Android設(shè)計(jì)模式-橋接模式
Android設(shè)計(jì)模式-享元模式
行為型設(shè)計(jì)模式
Android設(shè)計(jì)模式-策略模式
Android設(shè)計(jì)模式-命令模式
Android設(shè)計(jì)模式-責(zé)任鏈模式
Android設(shè)計(jì)模式-模版方法模式
Android設(shè)計(jì)模式-迭代器模式
Android設(shè)計(jì)模式-觀察者模式
Android設(shè)計(jì)模式-備忘錄模式
Android設(shè)計(jì)模式-中介者模式
Android設(shè)計(jì)模式-訪問(wèn)者模式
Android設(shè)計(jì)模式-狀態(tài)模式
Android設(shè)計(jì)模式-解釋器模式
1.定義
策略模式也叫政策模式米同。
定義一組算法,將每個(gè)算法都封裝起來(lái)摔竿,并且使他們之間都可以互換窍霞。
策略模式使用的就是面向?qū)ο蟮睦^承和多態(tài)。
2.策略模式UML圖
角色介紹
- Strategy 抽象策略角色 定義每個(gè)策略必須有的屬性和方法
- ConcreteStrategy 具體策略角色 實(shí)現(xiàn)抽象策略角色拯坟,有該策略的具體實(shí)現(xiàn)
- Context 封裝角色但金,也叫上下文角色,屏蔽高層模塊對(duì)策略的直接訪問(wèn)郁季,封裝可能存在的變化冷溃。
3.簡(jiǎn)單實(shí)現(xiàn)
3.1 抽象策略角色
public interface Strategy {
void doSomething();
}
3.2 具體策略角色
public class ConcreteStrategy1 implements Strategy {
@Override
public void doSomething() {
System.out.println("具體策略1");
}
}
public class ConcreteStrategy2 implements Strategy {
@Override
public void doSomething() {
System.out.println("具體策略2");
}
}
3.3 封裝角色
public class Context {
private Strategy strategy;
public Context(Strategy strategy) {
this.strategy = strategy;
}
public void doAnything(){
this.strategy.doSomething();
}
}
3.4 客戶端調(diào)用
public class MyClass {
public static void main(String args[]) {
Strategy strategy1=new ConcreteStrategy1();
Strategy strategy2=new ConcreteStrategy2();
Context context=new Context(strategy1);
context.doAnything();
System.out.println("-----------");
context=new Context(strategy2);
context.doAnything();
}
}
打印結(jié)果為
具體策略1
-----------
具體策略2
ConcreteStrategy1 ConcreteStrategy2分別為兩種具體的策略,就想算法里的加法和減法梦裂。通過(guò)封裝角色的封裝似枕,在客戶端調(diào)用的時(shí)候,只需要傳入相應(yīng)的策略到封裝角色中年柠,就可以調(diào)用其具體的實(shí)現(xiàn)方法凿歼。
4.總結(jié)
4.1優(yōu)點(diǎn)
- 策略算法可以自由切換,只要實(shí)現(xiàn)抽象冗恨,就可以通過(guò)傳入封裝角色中進(jìn)行切換
- 避免使用多重條件判斷
- 擴(kuò)展性良好 增加一個(gè)策略非常簡(jiǎn)單答憔,只需要實(shí)現(xiàn)抽象策略角色就行。
4.2缺點(diǎn)
- 每個(gè)策略對(duì)應(yīng)一個(gè)策略類掀抹,類數(shù)量增加
- 所有的策略類都需要對(duì)外暴露虐拓,否則客戶端不曉得怎么傳了。傲武。蓉驹。
4.3應(yīng)用場(chǎng)景
- 多個(gè)類只有在算法或者行為上略有不同的場(chǎng)景城榛。
- 算法需要自由切換的場(chǎng)景
- 需要屏蔽具體算法規(guī)則的場(chǎng)景