定義:定義一組算法,將每一個算法都封裝起來,而且使他們之間能夠互換。算法
類型:行爲類模式編程
類圖:數組
策略模式是對算法的封裝,把一系列的算法分別封裝到對應的類中,而且這些類實現相同的接口,相互之間能夠替換。在前面說過的行爲類模式中,有一種模式也是關注對算法的封裝——模版方法模式,對照類圖能夠看到,策略模式與模版方法模式的區別僅僅是多了一個單獨的封裝類Context,它與模版方法模式的區別在於:在模版方法模式中,調用算法的主體在抽象的父類中,而在策略模式中,調用算法的主體則是封裝到了封裝類Context中,抽象策略categarry通常是一個接口,目的只是爲了定義規範,裏面通常不包含邏輯。其實,這只是通用實現,而在實際編程中,由於各個具體策略實現類之間不免存在一些相同的邏輯,爲了不重複的代碼,咱們經常使用抽象類來擔任categarry的角色,在裏面封裝公共的代碼,所以,在不少應用的場景中,在策略模式中通常會看到模版方法模式的影子。ide
策略模式的結構this
策略模式代碼實現設計
public interface Icategarry
{
void say(String name);
}對象
public class Categarry1 implements Icategarry
{
@Override
public void say(String name)
{
System.out.print("姓名:"+name+"%n");
}
}blog
public class Categarry implements Icategarry
{
@Override
public void say(String name)
{
System.out.print("姓名"+name+"%n");排序
}
}繼承
public class Context
{
Icategarry categarryInstace;
public Context()
{
// TODO Auto-generated constructor stub
}
public Context(Icategarry categarryInstace)
{
this.categarryInstace=categarryInstace;
}
public void Execute(String name)
{
categarryInstace.say(name);
}
}
策略模式的優缺點
策略模式的主要優勢有:
策略模式的缺點主要有兩個:
適用場景
作面向對象設計的,對策略模式必定很熟悉,由於它實質上就是面向對象中的繼承和多態,在看完策略模式的通用代碼後,我想,即便以前歷來沒有據說過策略模式,在開發過程當中也必定使用過它吧?至少在在如下兩種狀況下,你們能夠考慮使用策略模式,
策略模式是一種簡單經常使用的模式,咱們在進行開發的時候,會常常有意無心地使用它,通常來講,策略模式不會單獨使用,跟模版方法模式、工廠模式等混合使用的狀況比較多。