分享

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

 Coder编程 2021-07-11

策略模式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

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多