设计模式 - 策略模式

晚上睡不着,想了想这两天研究的策略模式,刚才灵光一闪,脑子里突然发问   “为什么要用策略模式?”

之后上网各种查资料,然后翻看书籍,得到结果如下:

        首先, 所有的设计模式都是为了更方便(更少的代码量),更优(性能消耗更小)的方式来开发而整理出来的一些套路,而策略模式  则是为了解决我们的在相同的问题中,不同的解决方式而产生的代码设计,代码解藕。

        举例如下:  数据库大家都了解,如果我们在开发中需要依据不同的情况连接不同的数据库,如oracle,mysql...等等一些数据库。

        按照传统开发而言,我们因该写一个class,里面有两个方法,一个连接oracle,一个连接mysql,在每次使用的使用 new 出来这么一个连接类来使用,一旦要增加或者修改连接数据库的方式都需要对代码进行重复修改,而策略模式,则是在我们需要的时候来选择需要new的class就可以,我们只需要在第一次使用的时候写好连接数据库的class类就可以,比如,设计一个连接数据库的接口,接口中只有连接数据库一个方法,之后再写多个class并实现连接数据库接口,用于不同的数据库连接,每次使要新增连接数据库方式的时候都可以通过新增class解决,不需要对原有代码进行修改。(我觉得这种方式替代了if else, 而且还有了更好的扩张性)。

参考代码如下

定义连接数据库接口

public interface ConnectDb {
    void connectMethod();
}

定义实现数据库的方式,如oracle,mysql

public class ConnectOracle implements ConnectDb{

    @Override
    public void connectMethod() {
        System.out.println("连接oracle数据库");
    }
}
public class ConnectMysql implements ConnectDb{

    @Override
    public void connectMethod() {
        System.out.println("连接mysql");
    }
}

 

调用test方法测试

@SpringBootTest
public class Test {

    @org.junit.jupiter.api.Test
    public void testStrategy(){
        ConnectDb connectDbMysql = new ConnectMysql();
        connectDbMysql.connectMethod();//输出 mysql连接
        ConnectDb connectDbOracle = new ConnectOracle();
        connectDbOracle.connectMethod();;//输出 oracle连接
    }
}

 

上述测试方法个人觉得有点lou,改一下

@SpringBootTest
public class Test {

    @Value("${connect.DB.class}")
    private String connectMethod;
    @org.junit.jupiter.api.Test
    public void testStrategy(){
        try {
            ConnectDb connectDb = (ConnectDb)Class.forName(connectMethod).newInstance();
            connectDb.connectMethod();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

    }
}

采用配置文件来选择我需要实现的class,当然,class不一定非要用配置文件,如果想更灵活的话可以考虑存储到文件或者数据库中,根据不同的业务场景取出不同的class来进行实例化处理。

 

另外关于学习的总结如下,在遇到问题的时候一定要先想清楚,我为什么要学习这玩意,它能解决什么样子的问题?带着提出问题的观点去学习,我们才能发现更多的闪光点,诸君共勉。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值