最近要实现一个算法,根据服务器返回值的来实现,不同的算法。比如返回值为1,则实现算法一;返回2,则实现算法二;。。。以此类推。好了,现在动手开始写了,为了使代码实现可扩展和复用,想到了使用设计模式。
1.定义一个接口
public interface IGenerateImage {
void generate();
}
2.实现四种不同的算法
算法一:
public class GenerateImage1 implements IGenerateImage {
GenerateImage1() {
}
@Override
public void generate() {
Log.i("aaa","执行算法一");
}
}
算法二:
public class GenerateImage2 implements IGenerateImage {
GenerateImage2() {
}
@Override
public void generate() {
Log.i("aaa","执行算法二");
}
}
算法三:
public class GenerateImage3 implements IGenerateImage {
GenerateImage3() {
}
@Override
public void generate() {
Log.i("aaa","执行算法三");
}
}
算法四:
public class GenerateImage4 implements IGenerateImage {
GenerateImage4() {
}
@Override
public void generate() {
Log.i("aaa","执行算法四");
}
}
3.封装一个算法的分配器
public class GenerateImageType {
private final int PURIMAGE = 1;
private final int FOURPT = 2;
private final int FOURPTMUL = 3;
private final int FOURPTCOV = 4;
static private Context mContext;
static int mType;
private IGenerateImage mIGenerateImage;
static GenerateImageType mInstance;
private GenerateImageType() {
}
public static GenerateImageType getInstance(Context context, int type) {
if (mInstance == null) {
mInstance = new GenerateImageType();
}
mContext = context;
mType = type;
return mInstance;
}
public void generate() {
switch (mType) {
case PURIMAGE:
mIGenerateImage = new GenerateImage1();
break;
case FOURPT:
mIGenerateImage = new GenerateImage2();
break;
case FOURPTMUL:
mIGenerateImage = new GenerateImage3();
break;
case FOURPTCOV:
mIGenerateImage = new GenerateImage4();
break;
default:
break;
}
if (mIGenerateImage != null) {
mIGenerateImage.generate();
}
}
}
4.客户端调用
GenerateImageType.getInstance(context, type).generate();
打算写一个策略模式的,看着样子成了一个工厂模式了。主要的目的就是实现不同算法的分离。修改一个不影响其他的算法。如果添加新算法或者删除一个老算法,只需修改少量的代码即可。
总之,设计模式主要是为了实现现有的功能,也不要过于迷信于某种情况下必须采用某种设计模式。只有充分理解这些设计模式,才能做到以无形胜有形。