经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » 设计模式 » 查看文章
Java设计模式之002--策略模式 - 码农-张员外
来源:cnblogs  作者:码农-张员外  时间:2020/11/9 16:08:28  对本文有异议

策略模式Strategy Pattern) :定义了一系列的算法, 将每一种算法封装起来并可以相互替换使用, 策略模式让算法独立于使用它的客户应用而独立变化。 

OO设计原则:

1.面向接口编程(面向抽象编程);

2.封装变化;

3.多用组合, 少用继承 ;

 

当一个功能有多种实现方式时, 我们应该使用策略设计模式, 把功能抽象出来, 然后用不同的子类各自提供实现类, 在真正使用时, 根据业务情况来动态替换 

把可变的行为抽象出来, 这样的好处是这些行为可以在真正使用时相互替换。

 

策略模式的实际应用:

1.数据库操作封装;

2.微信扫码登录注册绑定操作 ;

举例说明:将数据保存到不同的地方,比如文件、网络、数据库中。

a.创建接口,以供不同方式去实现

  1. public interface ISave {
    public void save(String data);
    }

b.以供不同方式去实现接口中的方法

  1. public class FileSave implements ISave{
    @Override
    public void save(String data){
    System.out.println("把数据["+data+"]存储到文件中");
    }
    }
  1. public class DBSave implements ISave{
    @Override
    public void save(String data) {
    System.out.println("把数据["+data+"]存储到数据库中");
    }
    }

    public class NetSave implements ISave{
  1. @Override
    public void save(String data) {
    System.out.println("把数据["+data+"]存储到网络中");
    }
    }

c.通过类来组合接口和接口的实现类,自上而下地调用具体不同对象的相同方法,来实现多态性

  1. public class DataContext {
    private ISave iSave; //DataContext只依赖接口,不依赖具体的实现---->面向接口编程

    public DataContext(ISave iSave){
    this.iSave = iSave;
    }

    public void save1(String data){
    iSave.save(data);  //通过接口来调用具体对象的sava方法(父类调子类方法原理)
    }
    }

测试对比:

  1. public class Test {
    public static void main(String[] args) throws Exception{
    //1 依赖了具体类
    //1 ISave iSave = new FileSave();
    //1 iSave.save("苦战Java一辈子!!");

    //2 依赖接口(抽象类),具体的对象创建还要通过代码来改动
    //2 DataContext dc = new DataContext(new FileSave());
    //2 dc.save1("苦战Java一辈子!!");

    //3 依赖接口(抽象类),具体的对象类脱离到属性文件中(config.properties),而不是放在代码中
    //让软件更加利于维护(提高程序的可扩张性),牺牲性能
    Properties prop = new Properties(); //属性文件工具类
    prop.load(Thread.currentThread().getContextClassLoader()
    .getResourceAsStream("config.properties"));
    //属性文件中(config.properties): context.save=NetSave
    String className = prop.getProperty("context.save");
    ISave iSave = (ISave) Class.forName(className).newInstance();

    DataContext dc = new DataContext(iSave);
    dc.save1("苦战Java一辈子!!");
    }
    }


 

原文链接:http://www.cnblogs.com/manong-zhangyuanwai/p/13714485.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号