该模式是解决触发条件和触发结果的解耦,同时兼顾触发条件资源的可释放性。目的是为了获得触发结果。

/**
*
*/
package com.baidu.coolapp.answer;
import java.util.Hashtable;
import com.baidu.coolapp.composite.IComposite;
/**
* @author liweigao
*
*/
public interface IJury extends IComposite> {
void check();
Hashtable> getResults();
Hashtable> getQuestions();
}
/**
*
*/
package com.baidu.coolapp.answer;
/**
* @author liweigao
*
*/
public interface IResult{
void setResult(T result);
T getResult();
void setTag(String tag);
String getTag();
}
/**
*
*/
package com.baidu.coolapp.answer;
/**
* @author liweigao
*
*/
public interface IQuestion{
T answer();
IResultcreateResult(Object... args);
String getTag();
}

/**
*
*/
package com.baidu.coolapp.answer;
/**
* @author liweigao 2014年11月20日
* @param */
public abstract class AResultimplements IResult{
private T mResult;
private String mTag;
/*
* (non-Javadoc)
*
* @see common.share.lwg.trueorfalse.IResult#setTag(java.lang.String)
*/
@Override
public void setTag(String tag) {
this.mTag = tag;
}
/*
* (non-Javadoc)
*
* @see common.share.lwg.trueorfalse.IResult#getTag()
*/
@Override
public String getTag() {
// TODO Auto-generated method stub
return this.mTag;
}
/*
* (non-Javadoc)
*
* @see common.share.lwg.answer.IResult#setResult(java.lang.Object)
*/
@Override
public void setResult(T result) {
this.mResult = result;
}
/*
* (non-Javadoc)
*
* @see common.share.lwg.answer.IResult#getResult()
*/
@Override
public T getResult() {
return this.mResult;
}
}

/**
*
*/
package com.baidu.coolapp.answer;
/**
* @author liweigao
*
*/
public abstract class AQuestionimplements IQuestion{
private String mTag;
public AQuestion(String tag) {
this.mTag = tag;
}
/* (non-Javadoc)
* @see common.share.lwg.trueorfalse.IQuestion#getTag()
*/
@Override
public String getTag() {
// TODO Auto-generated method stub
return this.mTag;
}
}

/**
*
*/
package com.baidu.coolapp.answer;
import java.util.Enumeration;
import java.util.Hashtable;
/**
* @author liweigao
*
*/
public abstract class AJury implements IJury {
private Hashtable> mQuestions = new Hashtable>();
private Hashtable> mResults = new Hashtable>();
/*
* (non-Javadoc)
*
* @see common.share.lwg.composite.IComposite#add(java.lang.Object)
*/
@Override
public void add(IQuestionobject) {
String addTag = object.getTag();
this.mQuestions.put(addTag, object);
IResultresult = object.createResult();
result.setTag(addTag);
this.mResults.put(addTag, result);
}
/*
* (non-Javadoc)
*
* @see common.share.lwg.composite.IComposite#remove(java.lang.Object)
*/
@Override
public void remove(IQuestionobject) {
String tag = object.getTag();
this.mQuestions.remove(tag);
this.mResults.remove(tag);
}
/*
* (non-Javadoc)
*
* @see common.share.lwg.trueorfalse.Ireferee#check()
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
public void check() {
Enumeration> enus = mQuestions.elements(); while (enus.hasMoreElements()) { IQuestionquestion = enus.nextElement(); String tag = question.getTag(); IResult result = mResults.get(tag); result.setResult(question.answer()); } } /* * (non-Javadoc) * * @see common.share.lwg.answer.IJury#getResults() */ @Override public Hashtable> getResults() { return this.mResults; } /* * (non-Javadoc) * * @see common.share.lwg.answer.IJury#getQuestions() */ @Override public Hashtable> getQuestions() { return this.mQuestions; } } 

/**
*
*/
package com.baidu.coolapp.config.answer.sweetbox;
import com.baidu.coolapp.config.mediator.IConfigColleague;
/**
* @author liweigao
* 2014年11月21日
*/
public class ResultBean {
private IConfigColleague mSweetFile;
private IConfigColleague mBoxFile;
private boolean mNeedMerge = false;
private boolean mNeedUpload = true;
private boolean mNeedLoadConfig = false;
/**
* @return the sweetFile
*/
public IConfigColleague getSweetFile() {
return mSweetFile;
}
/**
* @param sweetFile the sweetFile to set
*/
public void setSweetFile(IConfigColleague sweetFile) {
this.mSweetFile = sweetFile;
}
/**
* @return the boxFile
*/
public IConfigColleague getBoxFile() {
return mBoxFile;
}
/**
* @param boxFile the boxFile to set
*/
public void setBoxFile(IConfigColleague boxFile) {
this.mBoxFile = boxFile;
}
/**
* @return the needMerge
*/
public boolean isNeedMerge() {
return mNeedMerge;
}
/**
* @param needMerge the needMerge to set
*/
public void setNeedMerge(boolean needMerge) {
this.mNeedMerge = needMerge;
}
/**
* @return the needUpload
*/
public boolean isNeedUpload() {
return mNeedUpload;
}
/**
* @param needUpload the needUpload to set
*/
public void setNeedUpload(boolean needUpload) {
this.mNeedUpload = needUpload;
}
/**
* @return the needLoadConfig
*/
public boolean isNeedLoadConfig() {
return mNeedLoadConfig;
}
/**
* @param needLoadConfig the needLoadConfig to set
*/
public void setNeedLoadConfig(boolean needLoadConfig) {
this.mNeedLoadConfig = needLoadConfig;
}
}

/**
*
*/
package com.baidu.coolapp.config.answer.sweetbox;
import java.io.File;
import java.io.UnsupportedEncodingException;
import java.util.Map;
import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.entity.StringEntity;
import org.json.JSONException;
import org.json.JSONObject;
import android.content.Context;
import com.baidu.java.HashMap;
import com.loopj.android.http.JsonHttpResponseHandler;
import com.loopj.android.http.RequestParams;
import com.loopj.android.http.SyncHttpClient;
import com.baidu.coolapp.answer.AJury;
import com.baidu.coolapp.answer.IResult;
import com.baidu.coolapp.config.mediator.ConfigMediator;
import com.baidu.coolapp.config.mediator.IConfigColleague;
import com.baidu.coolapp.config.merge.ConfigMergeProxy;
import com.baidu.coolapp.config.merge.IMergeProxy;
import com.baidu.coolapp.enumtype.FileEnum;
import com.baidu.coolapp.enumtype.Id;
import com.baidu.coolapp.enumtype.Key;
import com.baidu.coolapp.enumtype.Tag;
import com.baidu.coolapp.tools.JsonTool;
import com.baidu.coolapp.tools.PropertyTool;
import com.baidu.coolapp.tools.ResourceTool;
import com.baidu.coolapp.tools.UserTool;
/**
* @author liweigao 2014年11月21日
*/
public class SweetBoxJury extends AJury {
private ConfigMediator mConfigMediator;
public SweetBoxJury(ConfigMediator mediator) {
this.mConfigMediator = mediator;
}
public void checkTwoFile(IConfigColleague left, IConfigColleague right,
Context context) {
this.add(new SweetBoxQuestion(Tag.SWEET_BOX_QUESTION.getName(), left,
right));
this.check();
ResultBean resultBean = getSweetBoxResultBean();
if (resultBean.isNeedMerge()) {
IConfigColleague sweet = resultBean.getSweetFile();
IConfigColleague box = resultBean.getBoxFile();
if (Id.SERVER_CONFIG.getId().equals(sweet.getId())
|| Id.SERVER_CONFIG.getId().equals(box.getId())) {
downLoadServerFile(context);
} else {
}
mergeFile(sweet, box, context);
if (Id.SERVER_CONFIG.getId().equals(box.getId())) {
mConfigMediator.replaceFile(sweet, box);
} else {
}
if (Id.BACK_CONFIG.getId().equals(box.getId())) {
mConfigMediator.replaceFile(sweet, box);
} else {
}
} else {
IConfigColleague boxFile = resultBean.getBoxFile();
if (Id.SERVER_CONFIG.getId().equals(boxFile.getId())) {
downLoadServerFile(context);
mConfigMediator.replaceFile(resultBean.getSweetFile(),
resultBean.getBoxFile());
} else {
}
}
}
private void mergeFile(IConfigColleague sweet, IConfigColleague box,
Context context) {
}
private void downLoadServerFile(final Context context) {
}
@SuppressWarnings("unchecked")
public IResultgetSweetBoxResult() {
IResultresult = this.getResults().get(
Tag.SWEET_BOX_QUESTION.getName());
return (IResult) result;
}
public ResultBean getSweetBoxResultBean() {
return getSweetBoxResult().getResult();
}
}

/**
*
*/
package com.baidu.coolapp.config.answer.sweetbox;
import com.baidu.coolapp.answer.AQuestion;
import com.baidu.coolapp.answer.IResult;
import com.baidu.coolapp.config.mediator.IConfigColleague;
import com.baidu.coolapp.enumtype.Id;
/**
* @author liweigao
* 2014年11月21日
*/
public class SweetBoxQuestion extends AQuestion{
private IConfigColleague mLeft;
private IConfigColleague mRight;
/**
* @param tag
*/
public SweetBoxQuestion(String tag,IConfigColleague left,IConfigColleague right) {
super(tag);
this.mLeft = left;
this.mRight = right;
}
/* (non-Javadoc)
* @see common.share.lwg.answer.IQuestion#answer()
*/
@Override
public ResultBean answer() {
ResultBean resultBean = new ResultBean();
int leftVersion = mLeft.getVersion();
int rightVersion = mRight.getVersion();
long leftTime = mLeft.getTime();
long rightTime = mRight.getTime();
if(leftVersion > rightVersion) {
resultBean.setBoxFile(mLeft);
resultBean.setSweetFile(mRight);
if(leftTime > rightTime) {
resultBean.setNeedMerge(false);
} else if(leftTime < rightTime) {
resultBean.setNeedMerge(true);
} else {
resultBean.setNeedMerge(false);
}
} else if(leftVersion < rightVersion) {
resultBean.setBoxFile(mRight);
resultBean.setSweetFile(mLeft);
if(leftTime > rightTime) {
resultBean.setNeedMerge(true);
} else if(leftTime < rightTime) {
resultBean.setNeedMerge(false);
} else {
resultBean.setNeedMerge(false);
}
} else {
if(leftTime > rightTime) {
resultBean.setBoxFile(mLeft);
resultBean.setSweetFile(mRight);
resultBean.setNeedMerge(false);
} else if(leftTime < rightTime) {
resultBean.setBoxFile(mRight);
resultBean.setSweetFile(mLeft);
resultBean.setNeedMerge(false);
} else {
resultBean.setNeedMerge(false);
resultBean.setNeedUpload(false);
String leftId = mLeft.getId();
if(leftId.equals(Id.SDCARD_CONFIG.getId())) {
resultBean.setBoxFile(mLeft);
resultBean.setSweetFile(mRight);
} else {
resultBean.setBoxFile(mRight);
resultBean.setSweetFile(mLeft);
}
}
}
return resultBean;
}
/* (non-Javadoc)
* @see common.share.lwg.answer.IQuestion#createResult(java.lang.Object[])
*/
@Override
public IResultcreateResult(Object... args) {
return new SweetBoxResult();
}
}

/**
*
*/
package com.baidu.coolapp.config.answer.sweetbox;
import com.baidu.coolapp.answer.AResult;
/**
* @author liweigao
* 2014年11月21日
*/
public class SweetBoxResult extends AResult{
}

自创设计模式-----答题卡模式相关推荐

  1. 研磨设计模式之 策略模式--转

    http://www.uml.org.cn/sjms/201009092.asp 研磨设计模式之 策略模式   2010-09-09 作者:云飞龙行 来源:云飞龙行的blog   先感谢众多朋友的支持 ...

  2. 基于 SpringMvc + OpenCV 实现的答题卡识别系统(附源码)

    点击关注公众号,实用技术文章及时了解 java_opencv 项目介绍 OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,它提供了一系列图像处理和计算机视觉方面很多通用算法.是研究图像 ...

  3. python 答题卡识别_opencv+python机读卡识别整合版

    稍微整理了一下这个系列的一二三四章,可能看着更舒服吧--这个系列的解决方案不止一种,调参的方法也是各种各样,反正能够满足需求就极好了 1.预处理 这次的机读卡识别项目来源暑期培训,主要包括内容一张手机 ...

  4. 答题卡识别任务--opencv python(附代码)

    答题卡识别 项目理论和源码来自唐宇迪opencv项目实战 记一篇python-opencv 完成答题卡识别 项目的学习笔记 输入一张特定格式的答题卡图片(答题卡中题目数量和选项个数是固定的),能够输出 ...

  5. 八年级python考试题及答案_(新世纪版)2018-2019学年第二学期八年级信息技术期末试卷+答题卡+答案...

    (新世纪版)2018-2019学年第二学期八年级信息技术期末试卷+答题卡+答案 2018-2019学年第一学期期末模拟试卷 八年级 信息技术 时间:40分钟 总分:100分 一.单项选择题(每题3分, ...

  6. Android常用设计模式之Builder模式理解

    Android常用设计模式之Builder模式 1 单例模式 2 Builder模式 Builder模式的应用场景 总结 1 单例模式 单例模式之前有详细的介绍,可移步到链接: 常见的单例模式及其特点 ...

  7. 图像识别——(java使用opencv答题卡识别)

    具体算法实现:具体算法实现--opencvhttps://blog.csdn.net/qq_39246466/article/details/123819795 1.安装: 配置linux或windo ...

  8. 基于 SpringMvc+OpenCV 实现的答题卡识别系统(附源码)

    java_opencv 项目介绍 OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,它提供了一系列图像处理和计算机视觉方面很多通用算法.是研究图像处理技术的一个很不错的工具.最初开始接 ...

  9. 观察者模式(Observe Pattern) – 设计模式之行为模式

    观察者模式(Observer Pattern) – 设计模式之行为模式: 目录 观察者模式(Observer Pattern) 类图 例子-新闻: 过程: 类图: 代码: 被观察者 INewsSubj ...

最新文章

  1. 无协议脱欧将有损英国未来?议员吁支持二次公投
  2. Windows下删除Kafka中某个Group
  3. 关于VS中区分debug与release,32位与64位编译的宏定义
  4. js 绑定的键盘事件
  5. Matlab实用程序--图形应用-区域图形
  6. 按钮交互loading ---- 转圈圈 加载
  7. PLSQL_性能优化系列15_Oracle Explain Plan解析计划解读
  8. Linux 内核下载地址
  9. 论文研读 —— 7. Very Deep Convolutional Networks for Large-Scale Image Recognition (3/3)
  10. ibm软件工程师含金量_.NET软件工程师最好取得哪些证书?(高分求高手)
  11. 【OpenGL】用GLFW和glad创建窗口
  12. 如何将风险应用加入白名单_vivo手机怎么把风险应用添加到白名单
  13. C#反编译之:<PrivateImplementationDetails>.ComputeStringHash 错误
  14. iOS AirDrop
  15. 外卖优惠券小程序源码,美团外卖,饿了么外卖红包
  16. 英语基础知识:句子类型
  17. 计算机故障代码ff,电脑DEBUG长代码显示FF故障检修
  18. 路径衰耗和阴影衰落及其相关的模型
  19. 2022初级会计实务教材读书笔记
  20. 灵魂三问:什么是接口测试,接口测试怎么玩,接口自动化测试怎么玩?

热门文章

  1. puml绘制思维导图_如何用ProcessOn画出漂亮的思维导图
  2. 谷歌json插件_程序员必备的4款Chrome插件,妥妥的神器!
  3. java图片序列化_Java中的强大武器——对象的序列化
  4. android studio 库项目,Android Studio 发布项目到jcenter库
  5. OpenCV中的光流及视频特征点追踪
  6. 电话号码正则表达式键盘弹起验证
  7. 在CentOS 7.7 x86_64上安装InfluxDB 1.8.0实录
  8. 在CentOS 6.9 x86_64的OpenResty 1.13.6.1上使用基于Redis实现动态路由示例
  9. uboot引导kernel - 2- uboot/kernel需要放在DDR什么位置的问题
  10. linux文件权限详解