Java设计模式之002--策略模式

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

OO设计原则:

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

2.封装变化;

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

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

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

策略模式的实际应用:

1.数据库操作封装;

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

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

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

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

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

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

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

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

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

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

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

测试对比:

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一辈子!!");    }}
(0)

相关推荐

  • 序列化与反序列化,使用中千万要避开这些坑

    来源:liuchenyang0515.blog.csdn.net/ article/details/118463573 文章目录 序列化与反序列化的概念 子类实现Serializable接口,父类没有 ...

  • Java设计模式之004--代理模式

    代理模式(Proxy) : 为其他对象提供一种代理以控制对这个对象的访问. 代理模式说白了就是"真实对象" 的代表, 在访问对象时引入一定程度的间接性, 因为这种间接性可以附加多种 ...

  • Java设计模式之003--工厂模式

    工厂模式(Factory Pattern) 是 Java 中最常用的设计模式之一. 这种类型的设计模式属于创建型模式, 它提供了一种创建对象的最佳方式. 在工厂模式中, 我们在创建对象时不会对客户端暴 ...

  • 图解Java设计模式之中介者模式

    智能家庭项目 传统方案解决智能家庭管理问题 中介者模式基本介绍 中介者模式的原理类图 中介者模式 - 智能家庭的操作流程 中介者模式的注意事项和细节 智能家庭项目 1)智能家庭包括各种设备,闹钟.咖啡 ...

  • [菜鸟的设计模式之旅]策略模式

    策略模式 定义 什么是策略模式?定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户. 我的理解就是:比如我们接下来要说到的鸭子案例,有的鸭子可以飞,而飞又分为很 ...

  • java设计模式之装饰器模式

    装饰器模式的定义: 装饰器模式也叫作包装器模式,指在不改变原有对象的基础上,动态地给一个对象添加一些额外的职责.就增加功能来说,装饰器模式相比生成子类更为灵活,属于结构性设计模式. 装饰器模式提供了比 ...

  • 详解JAVA面向对象的设计模式 (二)、策略模式

    策略模式 Strategy 介绍 在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改.这种类型的设计模式属于行为型模式. 在策略模式中,我们创建表示各种策略的对象和 ...

  • 设计模式:策略模式,Java集合定制排序的核心思想

    前言 前阵子面试的时候,有个面试官问我了解哪些设计模式吗?我说了策略模式.接着他问有哪些场景应用,我又回答他jdk的集合工具类有个排序方法就用到了策略模式,也就是java.util包下的Collect ...

  • JAVA设计模式之策略模式 - Strategy

    在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改.这种类型的设计模式属于行为型模式. 在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 ...

  • Java设计模式【命令模式】

    命令模式 命令模式很好理解,举个例子,司令员下令让士兵去干件事情,从整个事情的角度来考虑,司令员的作用是,发出口令,口令经过传递,传到了士兵耳朵里,士兵去执行.这个过程好在,三者相互解耦,任何一方都不 ...