当前位置: 首页 > 编程日记 > 正文

自创设计模式-----答题卡模式

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

/**
* 
*/
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{
}







相关文章:

The system cannot find the file specified

在家工作&#xff0c;程序在家里的电脑运行时&#xff0c;出现一个异常&#xff0c;还是第一见到&#xff1a; Server Error in / Application. The system cannot find the file specified Description: An unhandled exception occurred during the execution of the current…

【ACM】杭电OJ 1002

题目链接&#xff1a;杭电OJ 1002 表面上看是ab&#xff0c;很简单&#xff0c;其实是大数的相加&#xff0c;所以要考虑的因素有很多&#xff1b;&#xff08;瞬间觉得要是能用Python多好&#xff0c;哈哈哈&#xff09; 还有&#xff01;&#xff01;&#xff01; 要特别注…

Excel VBA 教程

https://www.w3cschool.cn/excelvba/ Excel VBA 编程教程 https://www.yiibai.com/vba VBA教程 http://www.accessoft.com/article-show.asp?id16502 关于VBA的0、""(空字符串)、Null、Empty、与 Nothing 的区别 转载于:https://www.cnblogs.com/onelikeone/p/…

NDK环境搭建

一、Eclipse关联cygwin 1. 工程->右击选择Properties->选择Builders&#xff0c;在Builders中选择New创建一个Program 2. 参数配置 二、Eclipse关联ndk-build&#xff08;自建Builder方法&#xff09; 1. Project->Properties->Builders->New&#xff0c;新建一…

【ACM】杭电OJ 2000

题目链接&#xff1a;杭电OJ 2000 注意使用getchar()&#xff0c;因为“\n”也是一个字符 #include "stdio.h" int main () {char a,b,c,t;while(scanf("%c%c%c",&a,&b,&c)!EOF){getchar();if(a > b){ta;ab;bt;}if(a > c){ta;ac;ct;}/…

bat批处理文件启动Eclipse和ivy本地仓库的配置

一、bat批处理文件启动Eclipse 所需文件&#xff1a; 1、eclipse 2、jre 3、startup-eclipse.bat 确保以上三个文件夹同级 startup-eclipse.bat: set dir%CD% cd %dir%\eclipse eclipse.exe -vm %dir%\jre\bin -vmargs -Xms512M -Xmx1024M -XX:PermSize128M -XX:MaxPermSize256…

helm安装配置

简介 helm是kubernetes的包管理工具&#xff0c;用于简化部署和管理 Kubernetes 应用。用来管理charts——预先配置好的安装包资源。 Helm和charts的主要作用&#xff1a; 应用程序封装版本管理依赖检查便于应用程序分发helm是一个C/S框架的软件&#xff0c;helm相当于一个客户…

ndk-build 参数NDK_APPLICATION_MK问题

被网络传闻和文档无限坑啊&#xff0c;竟然都说的是错的参数名&#xff1a;NDK_APP_APPLICATION_MK是错误的&#xff0c;NDK_APPLICATION_MK才是正确的 I am trying to pass a preprocessor define into my native code using the Android NDK that is dependent on build conf…

【GOF】23中设计模式深析

2019独角兽企业重金招聘Python工程师标准>>> ###对象创建 原型模式、工厂模式、抽象工厂模式、生成器、单例模式###接口适配 适配器模式、桥接、外观模式、迭代器###行为扩展 访问者模式、装饰模式、责任链模式###算法封装 模板方法模式、策略模式、命令模式、###性…

【ACM】杭电OJ 2005

题目链接&#xff1a;杭电OJ 2005 第一次写的时候&#xff1a; #include "stdio.h" int main () {int year,month,day,days,flag;while(scanf("%d/%d/%d",&year,&month,&day)!EOF){if((year%40 && year%100!0)||(year%4000)){flag1;…

详解数组中的reduce方法

前言 这几天面试被问到了数组的方法有哪些&#xff0c;回答得简直一塌糊涂&#xff0c;面试官说reduce的功能很强大&#xff0c;于是想对这个方法进行总结&#xff0c;在红宝书中对这个方法的描述并不算多&#xff0c;我也是参考了其他文章才进行总结的&#xff0c;下面就开始吧…

NDK注意事项

1. ifeq 等命令后面要加空格 2. 换行缩进用tab&#xff0c;不要用多个空格 3. 判断编译目标需要用NDK 变量 TARGET_ARCH_ABI, 包含CPU类型&#xff0c;和ABI标识

mac os x常用快捷键及用法

最近在研究mac os x系统&#xff0c;开始入手&#xff0c;很不习惯&#xff0c;和windows差别很大&#xff0c;毕竟unix内核。使用中总结了一些使用快捷键&#xff08;默认&#xff09;&#xff0c;持续更新&#xff0c;欢迎大家补充。1.撤销&#xff1a;commandz 保存&#x…

【ACM】杭电OJ 2007

题目链接&#xff1a;杭电OJ 2007 本题容易出错的地方在于&#xff1a;要考虑输入的两个数的大小&#xff0c;一定是小的在前&#xff0c;大的在后 #include "stdio.h" int main () {int a,b,sum1,sum2,t;while(scanf("%d%d",&a,&b)!EOF){if(a&g…

iOS FMDB之FMDatabaseQueue(事物与非事物)

事物与非事物 事物是一个并发控制的基本单元&#xff0c;所谓的事务&#xff0c;它是一个操作序列&#xff0c;这些操作要么都执行&#xff0c;要么都不执行&#xff0c;它是一个不可分割的工作单位。 事物与非事物&#xff0c;简单的举例来说就是&#xff0c;事物就是把所有的…

NDK crash栈信息的错误定位

Android NDK是什么&#xff0c;为什么我们要用NDK&#xff1f; Android NDK 是在SDK前面又加上了“原生”二字&#xff0c;即Native Development Kit&#xff0c;因此又被Google称为“NDK”。众所周知&#xff0c;Android程序运行在Dalvik虚拟机中&#xff0c;NDK允许用户使用类…

【ACM】杭电OJ 1096

题目链接&#xff1a;杭电OJ 1096 只要注意输出格式就好&#xff0c;其他没有问题&#xff01; #include <stdio.h> int main () {int a,N,n,sum;scanf("%d",&N);while(N--){sum0;scanf("%d",&n);while(n--){scanf("%d",&a…

Eclipse中SVN设置文件为ignore后重新添加至版本控制

先前把需要版本控制的文件夹ignore了&#xff0c;用了很长时间找解决方法&#xff0c;结果发现竟如此简单&#xff0c;对eclipse的功能不熟悉啊。 方法如下&#xff1a;在Window->Show View -> Navigator 中可以看见所有的项目文件&#xff0c;找到ignore的文件&#xff…

第四范式完成C轮融资,金额超10亿元

雷锋网(公众号&#xff1a;雷锋网)消息&#xff0c;12月19日&#xff0c;第四范式于近期完成C轮融资&#xff0c;融资金额超过10亿元&#xff0c;估值约12亿美金。同时引入包括国新、启迪、保利、三峡、中信、农银、交银等战略股东&#xff0c;红杉中国继续追加投资。本轮新晋投…

android mediaplayer状态机

对播放音频/视频文件和流的控制是通过一个状态机来管理的。下图显示一个 MediaPlayer 对象被支持的播放控制操作驱动的生命周期和状态。椭圆代表 MediaPlayer 对象可能驻留的状态。弧线表示驱动 MediaPlayer 在各个状态之间迁移的播放控制操作。 这里有两种类型的弧线。由一个箭…

刚刚、几秒前,时间格式化函数

应用场景 浏览实时信息网站时&#xff0c;总会看到发布时间&#xff0c;是这么显示的 例如 刚刚、几秒前&#xff0c;几分钟&#xff0c;几天&#xff0c;日期 ...&#xff0c;提供以下处理方案 服务端 ——PHP客户端 ——JavaScript处理方案 服务端 ——PHP 使用服务器端实现&…

【ACM】杭电OJ 1241(深度优先搜索小结)

题目链接&#xff1a;杭电OJ 1241 深度优先搜索问题 深度优先搜索是搜索的手段之一。它从某个状态开始&#xff0c;不断地转移状态直到无法转移&#xff0c;然后回退到前一步的状态&#xff0c;继续转移到其他状态&#xff0c;如此不断重复&#xff0c;直至找到最终的解。 油…

阿里云双12服务器和阿里云双12数据库活动又开始了

一年一度的阿里云双12服务器活动又开始了&#xff0c;非常的便宜&#xff0c;只需原价的二折即可。 双12活动地址 https://m.aliyun.com/act/team1212

android audiotrack使用问题:listener不回调的原因

部分人使用audiotrack&#xff0c;有可能会发现audiotrack的回调方法不回调&#xff0c;其实很多情况下是这样子的&#xff1a; 一般的音频数据源会起一个线程获取&#xff0c;一般新起的线程都没有looper,而audiotrack的创建必须要一个looper,如果没有拿到当前线程的looper,就…

老男孩IT教育在线3期新学员司毅的计算机的基础知识

1&#xff1a;CUP在各个组件中相当于人的头主要负责运算数据和控制其他部件2&#xff1a;内存在各个组件中是临时存放数据的地方当电脑关机或重启后数据就会丢失但是它的运算速度非常快&#xff0c;因为CUP先调用它的数据。&#xff08;他的容量和处理速度直接决定了电脑的数据…

【C++】stack的部分使用(之后会不定时进行更新)

栈具有First In Last out&#xff08;FILO&#xff09;的特点&#xff0c;只能在栈顶进行插入和删除操作。 头文件&#xff1a;<stack> 成员函数&#xff1a; 1、size()&#xff1a;返回栈中的元素值 2、empty()&#xff1a;判断栈是否为空&#xff0c;为空的话返回t…

std::string的find问题研究

https://files-cdn.cnblogs.com/files/aquester/std之string的find问题研究.pdf 目录 目录 1 1. 前言 1 2. find字符串 1 3. find单个字符 2 4. 问题分析 3 4.1. gcc-4.1.2 3 4.2. gcc-4.8.2 4 5. a.cpp源代码 5 6. 单个字符版本find源码 5 7. 字符串版本find源码 6 7.1. gcc-4…

从内存溢出看Java 环境中的内存结构

作为有个java程序员&#xff0c;我想大家对下面出现的这几个场景并不陌生&#xff0c;倍感亲切&#xff0c;深恶痛绝&#xff0c;抓心挠肝&#xff0c;一定会回过头来问为什么为什么为什么会这样&#xff0c;嘿嘿&#xff0c;让我们看一下我们日常在开发过程中接触内存溢出的异…

【ACM】杭电OJ 1003。

运行环境VS2017 题目链接&#xff1a;杭电OJ 1003 主要思想是&#xff1a; 用d[i]来存放前i项中最大的和&#xff0c;得到end&#xff0c;然后再倒推&#xff0c;得起始的位置begin 然而在程序42行的疑问&#xff0c;大家可以讨论一下吗&#xff1f;&#xff1f;&#xff…

js 实现精确加减乘除运算之BigDecimal.js

在前端实际开发中&#xff0c;进行前端计算会出现丢失精度的问题&#xff0c;这里我们项目中运用了BigDecimal.js。 js计算丢失精度原因 计算机的二进制实现和位数限制有些数无法有限表示。就像一些无理数不能有限表示&#xff0c;如 圆周率 3.1415926...&#xff0c;1.3333...…