設計模式 1 策略模式原理及實踐

2021-09-29 15:26:35 字數 3868 閱讀 2556

策略模式作為一種軟體設計模式,指物件有某個行為,但是在不同的場景中,該行為有不同的實現演算法。比如每個人都要「交個人所得稅」,但是「在美國交個人所得稅」和「在中國交個人所得稅」就有不同的算稅方法。

策略模式的結構組成:

—抽象策略角色: 策略類,通常由乙個介面或者抽象類實現。

—環境角色:持有乙個策略類的引用,最終給客戶端呼叫

原理我相信大家都知道,應該如何應用呢?怎樣融合到專案開發中?

使用策略模式可以很容易實現可插拔系統的設計。

策略模式實踐場景(1):  普通應用場景,基於普通jar包裡面的應用

1.定義抽象策略角色targetinte***ce,具體策略角色:教師teacherimpl和學生studentimpl,環境角色policymanager

/**

* 抽象策略角色

* * @author: fengyantao

* @date: 2019/11/14 上午11:31

* @version: v1.0

* @review: fengyantao/2019/11/14 上午11:31

*/public inte***ce targetinte***ce

/** * 具體策略角色: 學生

* * @author: fengyantao

* @date: 2019/11/14 上午11:32

* @version: v1.0

* @review: fengyantao/2019/11/14 上午11:32

*/public class studentimpl implements targetinte***ce

}/**

* 具體策略角色:教師

* * @author: fengyantao

* @date: 2019/11/14 上午11:33

* @version: v1.0

* @review: fengyantao/2019/11/14 上午11:33

*/public class teacherimpl implements targetinte***ce

}/**

* 環境角色

* * @author: fengyantao

* @date: 2019/11/14 上午11:39

* @version: v1.0

* @review: fengyantao/2019/11/14 上午11:39

*/public class policymanager

public string read()

}

2.編寫測試類

/**

* 普通應用場景

*/public static void commontest()

結果輸出:

*************************=學生

*************************=教師

策略模式實踐場景(2):基於框架的使用,比如某個介面有很多實現(100個),在某個service中需要呼叫10個不同的實現類,那麼就需要注入10個實現類,就會看到好多@resource(name = "serimpl")的註解。那麼**看起來就很費勁了。

筆者基於上面的類做些改變,融合到框架中。

1.每個具體策略角色新增@service註解,把物件交給spring框架管理,建立spring框架管理者springcontextmanager,動態獲取bean例項

/**

* 抽象策略角色

* * @author: fengyantao

* @date: 2019/11/14 上午11:31

* @version: v1.0

* @review: fengyantao/2019/11/14 上午11:31

*/public inte***ce targetinte***ce

/** * 具體策略角色: 學生

* * @author: fengyantao

* @date: 2019/11/14 上午11:32

* @version: v1.0

* @review: fengyantao/2019/11/14 上午11:32

*/@service

public class studentimpl implements targetinte***ce

}/**

* 具體策略角色:教師

* * @author: fengyantao

* @date: 2019/11/14 上午11:33

* @version: v1.0

* @review: fengyantao/2019/11/14 上午11:33

*/@service

public class teacherimpl implements targetinte***ce

}/**

* 環境角色

* * @author: fengyantao

* @date: 2019/11/14 上午11:39

* @version: v1.0

* @review: fengyantao/2019/11/14 上午11:39

*/public class policymanager

public string read()

}/**

* spring框架管理

* * @author: fengyantao

* @date: 2019/11/14 上午11:39

* @version: v1.0

* @review: fengyantao/2019/11/14 上午11:39

*/@configuration

@suppresswarnings("all")}}

/*** 根據類從spring上下文獲取bean。

** @param clazz

* @param * @return

*/public static t getbean(classclazz)

/*** 根據類名從spring上下文獲取bean。

** @param beanid

* @param * @return

*/public static t getbean(string beanid)

}

2.編寫測試類

/**

* 框架應用場景

*/targetinte***ce studentimpl = springcontextmanager.getbean("studentimpl");

policymanager policymanager = new policymanager(studentimpl);

targetinte***ce teacherimpl = springcontextmanager.getbean("teacherimpl");

policymanager policymanager1 = new policymanager(teacherimpl);

system.out.println("*************************=" + policymanager.read());

system.out.println("*************************=" + policymanager1.read());

}

結果輸出:

*************************=學生

*************************=教師

1 設計模式之策略模式

設計模式的一句話 過分設計是一種罪過,要根據專案實事求是,沒有任何一種設計是一步到位,很多功能都是根據反饋進行改善。1 背景 在實際開發中,我們常常遇見實現某種業務功能時,有許多不同實現方式,使用者可以任意選擇其中的一種方式。例如,在排序某個序列資料時,我們可以選擇氣泡排序 快速排序 插入排序 堆排...

設計模式 二 策略模式 1

策略模式 strategy 它定義了演算法家族,分別封裝起來,讓他們之間可以互相替換,此模式讓演算法的變化,不會影響到使用演算法的客戶。結構圖 strategy抽象類,定義所有支援的演算法的公共介面。class strategy 演算法方法 virtual void algorithminte ce...

設計模式 一 策略模式 1

策略模式用到就是 多型 的思想,父類有多個子類,為同乙個行為實現不同的表現形式 舉例 1個中國人,1個印度人,他們都吃飯,但是中國人是用筷子,印度人是用手,這個就是多型,同一行為的2種實現方式 吃飯行為 public inte ce eating中國人和印度人 public class chines...