组成
封装角色 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(nn2) {
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实例去实现具体的策略。

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