1概述
2適用性
(2)需要使用一個算法的不同變體的時候。
(3)算法使用了客戶不應該知道的數據的時候。以避免暴露覆雜的、與算法相關的數據結構。
(4)一個類定義了多種行爲,並且這些行爲在這個類的操作中以多個條件語句的形式出現的時候。將相關的條件分支移入它們各自的Strategy類中以代替這些條件語句。
3參與者
(2)ConcreteStrategy:實現Strategy接口的某種具體算法。
(3)Context:用一個ConcreteStrategy對象來配置。維護一個對Strategy對象的引用。可定義一個接口來讓Stategy訪問它的數據。
4類圖
5示例
- package cn.lynn.strategy;
- public abstract class DBHelper {
- public abstract void crud();
- }
- package cn.lynn.strategy;
- public class JdbcTemplateImpl extends DBHelper {
- @Override
- public void crud() {
- System.out.println("使用JDBC方式操作數據庫!");
- }
- }
- package cn.lynn.strategy;
- public class HibernateFactoryImpl extends DBHelper {
- @Override
- public void crud() {
- System.out.println("使用Hibernate持久化方式操作數據庫!");
- }
- }
- package cn.lynn.strategy;
- public class Context {
- private DBHelper dbHelper;
- public Context(DBHelper dbHelper) {
- this.dbHelper = dbHelper;
- }
- public void execute() {
- dbHelper.crud();
- }
- }
- package cn.lynn.strategy;
- public class Client {
- public static void main(String[] args) {
- Context context = new Context(new JdbcTemplateImpl());
- context.execute();
- context = new Context(new HibernateFactoryImpl());
- context.execute();
- }
- }
- 使用JDBC方式操作數據庫!
- 使用Hibernate持久化方式操作數據庫!