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

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

OO设计原则:数据库

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

2.封装变化;设计模式

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

 

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

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

 

策略模式的实际应用:工具

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一生!!");    }}
相关文章
相关标签/搜索