策略模式适用于当一个应用系统需要实现某种特定的服务或者功能要求,但该服务或者功能有多种实现方式,并且允许服务的使用者灵活的进行选择时被使用!
例子:
在某个内容管理系统中,需要对用户提交的字符串进行转换,大写转换成小写,小写转换成大写,英文转换为中文,但是字符串应该进行什么方式转换,则由客户在具体应用中进行选择.
抽象策略类:他定义了一个接口,各种不同的算法以不同的方式来实现这个公共的接口,上下文环境对象使用这个接口调用不同的具体算法
public interface TransferInterfer { public String doTransferText(String inputStr); }
|
各个具体的策略实现类:
实现小写转换: public class LowerTransferImpl implements TransferInterfer {
public String doTransferText(String inputStr) { // TODO Auto-generated method stub
return inputStr.toLowerCase(); } } 实现大写转换: public class UpperTransferImpl implements TransferInterfer {
public String doTransferText(String inputStr) { // TODO Auto-generated method stub
return inputStr.toUpperCase(); } } 实现中文转换: public class TransferEnglishToChineseImple implements TransferInterfer {
public String doTransferText(String inputStr) { // TODO Auto-generated method stub
return "已经将"+inputStr+"转化为中文了"; } }
|
上下文环境对象:
上下文环境对象使用具体的策略实现类所提供的算法,同时内部维护一个抽象策略类的对象实例,并且负责动态设置运行时抽象策略类的具体实现算法,另外还负责与抽象策略类之间的交互和数据传递等工作!
public class WebAppContext { private TransferInterfer oneTransferImple=null; public void setOneTransferImple(TransferInterfer oneTransferImple){ this.oneTransferImple=oneTransferImple; } public WebAppContext(){} public String doTransferText(String inputStr){ return oneTransferImple.doTransferText(inputStr); } }
|
/** * 一个连接数据库的接口:ConnectionDBInterface * 不同的数据库实现了该接口:MySQLCOnnectionDBBean,OracleCOnnectionDBBean,SQLServerCOnnectionDBBean * 典型的策略模式 * * */ public class ConnectionDBBean { public static final int MySQL_DataBase=1; public static final int Oracle_DataBase=2; public static final int SQLServer_DataBase=3; public static Connection getDBConnection(int dbType){ ConnectionDBInterface oneConnectionDBBean=null; Connection conn=null; switch(dbType){ case MySQL_DataBase: oneConnectionDBBean=new MySQLCOnnectionDBBean(); conn=oneConnectionDBBean.getDBConnection(); break; case Oracle_DataBase: oneConnectionDBBean=new OracleCOnnectionDBBean(); conn=oneConnectionDBBean.getDBConnection(); break; case SQLServer_DataBase: oneConnectionDBBean=new SQLServerCOnnectionDBBean(); conn=oneConnectionDBBean.getDBConnection(); break; } return conn; } }
|
阅读(649) | 评论(0) | 转发(0) |