读书人

代码范例-设计模式-模板方法

发布时间: 2013-01-26 13:47:02 作者: rapoo

代码实例-设计模式-模板方法
package com.jd.consume.domain.lock;import java.util.List;import com.jd.consume.domain.model.OrderTask;/** * 用户消费任务锁定 * @author guanpanpan * */public interface DataLock {/** * 从数据库中查询一定数量的OrderTask,并进行lock,lock到指定条数就返回,如果lock不到就返回空集合 * @param modeSize 总模数 * @param modeNo 当前锁定模数 */public List<OrderTask> lock(int modeSize, int modeNo);/** * 解锁指定数据 */public int unLock(long id);}

?2.抽象实现类

?

?

package com.jd.consume.domain.lock.impl;import java.util.ArrayList;import java.util.List;import javax.annotation.Resource;import org.apache.commons.lang.StringUtils;import com.jd.consume.domain.lock.DataLock;import com.jd.consume.domain.model.OrderTask;import com.jd.consume.infrastructure.repository.OrderTaskRepository;import com.jd.consume.infrastructure.util.RouteUtil;public abstract class DataLockImpl implements DataLock {@Resourceprotected OrderTaskRepository orderTaskRepository;@Resourceprotected RouteUtil routeUtil;protected int maxLockSize;protected int getSize;@Overridepublic List<OrderTask> lock(int modeSize, int modeNo) {List<OrderTask> consumeInfoLocks = new ArrayList<OrderTask>();List<OrderTask> consumeInfos = getData();for (OrderTask consumeInfo : consumeInfos) {String pin = consumeInfo.getPin();if (StringUtils.isEmpty(pin)) {continue;}if (modeNo != routeUtil.getMode(pin, modeSize)) {continue;}if (lockSingleData(consumeInfo.getId())) {consumeInfoLocks.add(consumeInfo);}if (consumeInfoLocks.size() >= maxLockSize) {break;}}return consumeInfoLocks;}public abstract boolean lockSingleData(long id);public abstract List<OrderTask> getData();public void setMaxLockSize(int maxLockSize) {this.maxLockSize = maxLockSize;}public void setGetSize(int getSize) {this.getSize = getSize;}}

?3.具体实现类

?

?

package com.jd.consume.domain.lock.impl;import java.util.List;import org.springframework.beans.factory.annotation.Value;import org.springframework.stereotype.Service;import com.jd.consume.domain.model.OrderTask;/** * 加消费额度锁定 * @author guanpanpan * */@Service(value = "addConsumeLock")public class AddConsumeLock extends DataLockImpl {@Override@Value("${addConsumeLock.getSize}")public void setGetSize(int getSize) {super.setGetSize(getSize);}@Override@Value("${addConsumeLock.maxLockSize}")public void setMaxLockSize(int maxLockSize) {super.setMaxLockSize(maxLockSize);}@Overridepublic boolean lockSingleData(long id) {return orderTaskRepository.updateCusumeStatus(id, OrderTask.SYN_LOCK, OrderTask.SYN_WAIT) == 1;}@Overridepublic int unLock(long id) {return orderTaskRepository.updateCusumeStatus(id, OrderTask.SYN_WAIT, OrderTask.SYN_LOCK);}@Overridepublic List<OrderTask> getData() {List<OrderTask> orderTasks = orderTaskRepository.findOrderTasksByConsumeStatus(OrderTask.SYN_WAIT, getSize, false);return orderTasks;}}

?

package com.jd.consume.domain.lock.impl;import java.util.List;import org.springframework.beans.factory.annotation.Value;import org.springframework.stereotype.Service;import com.jd.consume.domain.model.OrderTask;/** * 减消费额数据锁定 * @author guanpanpan * */@Service(value = "pastConsumeLock")public class PastConsumeLock extends DataLockImpl {@Override@Value("${pastConsumeLock.getSize}")public void setGetSize(int getSize) {super.setGetSize(getSize);}@Override@Value("${pastConsumeLock.maxLockSize}")public void setMaxLockSize(int maxLockSize) {super.setMaxLockSize(maxLockSize);}@Overridepublic boolean lockSingleData(long id) {return orderTaskRepository.updatePastCusumeStatus(id, OrderTask.PAST_LOCK, OrderTask.SYN_COMPLETE) == 1;}@Overridepublic int unLock(long id) {return orderTaskRepository.updatePastCusumeStatus(id, OrderTask.SYN_COMPLETE, OrderTask.PAST_LOCK);}@Overridepublic List<OrderTask> getData() {List<OrderTask> consumeInfos = orderTaskRepository.findPastOrderTasks(getSize);return consumeInfos;}}

?

package com.jd.consume.domain.lock.impl;import java.util.List;import org.springframework.beans.factory.annotation.Value;import org.springframework.stereotype.Service;import com.jd.consume.domain.model.OrderTask;/** * 计算等级数据锁定 * @author guanpanpan * */@Service(value = "gradeLock")public class GradeLock extends DataLockImpl {@Override@Value("${gradeLock.getSize}")public void setGetSize(int getSize) {super.setGetSize(getSize);}@Override@Value("${gradeLock.maxLockSize}")public void setMaxLockSize(int maxLockSize) {super.setMaxLockSize(maxLockSize);}@Overridepublic boolean lockSingleData(long id) {return orderTaskRepository.updateCusumeLevStatus(id, OrderTask.LEV_LOCK, OrderTask.LEV_WAIT) == 1;}@Overridepublic int unLock(long id) {return orderTaskRepository.updateCusumeLevStatus(id, OrderTask.LEV_WAIT, OrderTask.LEV_LOCK);}@Overridepublic List<OrderTask> getData() {List<OrderTask> consumeInfos = orderTaskRepository.findOrderTasksByLevStatus(OrderTask.LEV_WAIT, getSize, false);return consumeInfos;}}

?

?

读书人网 >软件开发

热点推荐