您的位置:首页 > 编程语言 > Go语言

GoF23种设计模式之行为型模式之策略模式

2013-06-13 23:35 477 查看
传送门 ☞ 轮子的专栏 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229

1概述

定义一系列算法,把它们一个个都封装起来,并且让它们可以相互替换。策略模式使得算法可以独立于使用它的客户而发生变化。

2适用性

(1)许多相关的类仅仅是行为存在差异的时候。“策略”提供了一种使用多个行为中的一个来配置一个类的方法。

(2)需要使用一个算法的不同变体的时候。

(3)算法使用了客户不应该知道的数据的时候。以避免暴露复杂的、与算法相关的数据结构。

(4)一个类定义了多种行为,并且这些行为在这个类的操作中以多个条件语句的形式出现的时候。将相关的条件分支移入它们各自的Strategy类中以代替这些条件语句。

3参与者

(1)Strategy:定义所有支持的算法的公共接口。Context使用这个接口来调用某个ConcreteStrategy定义的算法。

(2)ConcreteStrategy:实现Strategy接口的某种具体算法。

(3)Context:用一个ConcreteStrategy对象来配置。维护一个对Strategy对象的引用。可定义一个接口来让Stategy访问它的数据。

4类图



5示例

Strategy

package cn.lynn.strategy;

public abstract class DBHelper {

public abstract void crud();

}
ConcreteStrategy

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持久化方式操作数据库!");
}

}
Context

package cn.lynn.strategy;

public class Context {

private DBHelper dbHelper;

public Context(DBHelper dbHelper) {
this.dbHelper = dbHelper;
}

public void execute() {
dbHelper.crud();
}
}
Client
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();
}

}
Result
使用JDBC方式操作数据库!
使用Hibernate持久化方式操作数据库!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: