java startegy设计模式

java startegy设计模式在 lab5 里面实验要求我们对于读写文件采用 staryegy 的设计模式 接下来我们就了解一下什么是 strategy 设计模式以及如何使用这种设计模式 策略模式其实就是就是对各个算法的一个封装 不是实现算法 而是封装算法 让客户端非常容易的调用 在编程中 不同的策略实际上可以理解成不同的算法 能够整体地替换算法

大家好,我是讯享网,很高兴认识大家。

在这里插入图片描述
讯享网

组成
封装角色 Context也叫做上下文角色,起承上启下封装左右,屏蔽高层模块对策略 、算法的直接访问,封装可能存在的变化
抽象策略角色 Strategy策略、算法家族的抽象,通常为接口,定义每个策略或算法必须具有的方法和属性
具体策略角色 ConcreteStrategy实现抽象策略中的操作,该类含有具体的算法.

接下来让我们看看在lab5里面对于策略模式的应用。
1、编写Strategy角色
package applications;
public interface output {
void outputtofile(String s,String[] ss);
}
2、编写不同会员的具体策略ConcreteStrategy
2.1
package applications;
import java.io.FileWriter;
import java.io.IOException;

public class output1 implements output{
@Override
public void outputtofile(String s, String[] ss) {
// TODO Auto-generated method stub
FileWriter fw;
try {
fw = new FileWriter(s,true);
for(int i=0;i<ss.length;i++) {
fw.write(ss[i]+"\n", 0, ss[i].length()+1);
}
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

public class output2 implements output{

@Override
public void outputtofile(String s, String[] ss) {
// TODO Auto-generated method stub
FileOutputStream fos;
try {
fos = new FileOutputStream(s,true);
for(int i=0;i<ss.length;i++) {
fos.write((ss[i]+"\n").getBytes());
}
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

2.3
package applications;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class output3 implements output{

@Override
public void outputtofile(String s, String[] ss) {
BufferedOutputStream buff;
try {
buff = new BufferedOutputStream(new FileOutputStream(s,true));
//buff.write(str.getBytes());
for(int i=0;i<ss.length;i++) {
buff.write((ss[i]+"\n").getBytes());
//buff.flush();
}
buff.flush();
buff.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
以上三个就是具体的对于写文件的不同的方式。他们都实现了刚才的output接口,并且每一个都根据自己这个方法的特点对方法进行了重写,到现在我们就已经有三个具体的策略了。

3、编写Context角色
最后就可以由用户自己来选择需要哪一种策略。
public class Writefile {
public void write(String s,String[] ss) {
Scanner in=new Scanner(System.in);
System.out.println(“输入你的选择”);
System.out.println(“1.利用java.nio.file”);
System.out.println(“2.利用FileInputStream”);
System.out.println(“3.利用java.nio.ByteBuffer”);
int nn=in.nextInt();
long startTime = System.currentTimeMillis(); //获取开始时间
if(nn1) {
output1 aOutput1=new output1();
aOutput1.outputtofile(s, ss);
}
if(nn
2) {
output2 aOutput2=new output2();
aOutput2.outputtofile(s, ss);
}
if(nn==3) {
output3 aOutput3=new output3();
aOutput3.outputtofile(s, ss);
}
long endTime = System.currentTimeMillis(); //获取结束时间
System.out.println(“程序运行时间:” + (endTime - startTime) + “ms”); //输出程序运行时
}
}

策略模式算是最常用的设计模式之一,Context和Strategy之间是委托的弱关联关系,Context委托ConcreteStrategy实例去实现具体的策略。

小讯
上一篇 2025-04-11 19:41
下一篇 2025-04-10 13:24

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/12671.html