当前位置: 首页 > news >正文

网站后台验证码不显示肇庆网络推广

网站后台验证码不显示,肇庆网络推广,社交网站建设流程,怎么做应援网站设计一个缓存--针对各种类型的缓存 1. 设计顶层接口2. 设计抽象类 -- AbstractCacheManager3. 具体子类3.1 -- AlertRuleItemExpCacheManager3.2 -- AlertRuleItemSrcCacheManager 4. 类图关系 1. 设计顶层接口 // 定义为一个泛型接口,提供给抽象类使用 public interface Cach…

设计一个缓存--针对各种类型的缓存

  • 1. 设计顶层接口
  • 2. 设计抽象类 -- AbstractCacheManager
  • 3. 具体子类
    • 3.1 -- AlertRuleItemExpCacheManager
    • 3.2 -- AlertRuleItemSrcCacheManager
  • 4. 类图关系

1. 设计顶层接口

// 定义为一个泛型接口,提供给抽象类使用
public interface CacheManager<T> {// 获取所有的缓存itemList<T> getAll();// 根据条件获取某些缓存itemList<T> get(Predicate<T> predicate);// 设置缓存boolean set(T t);// 设置缓存listboolean set(List<T> tList);
}

有接口必定有实现类或者抽象类,实现接口。
那为了更好地控制子类的行为,可以做一个抽象类,控制子类行为。

  • 分析:
    • 抽象类作为缓存管理的话,那么就需要提供安全访问数据
    • 需要考虑线程安全问题。
    • 花絮: 不仅要满足上述需求,而且让代码尽量简洁。

2. 设计抽象类 – AbstractCacheManager

  • 属性设计:
    • 需要一个缓存
    • 需要一个线程安全机制方案
  • 行为设计:
    • 自己的行为:
      • 利用线程安全机制控制缓存的读写。
      • 权限:仅自己可访问
    • 后代的行为:
      • 访问一些简单api方法即可实现安全访问缓存
      • 权限:公共访问
  • 设计模式:
    • 包裹思想,将后代行为方法中,包裹一层安全访问的行为。

Java Code:

 // properties design:
protected ConcurrentMap<String, T> cache;private ReentrantReadWriteLock lock = new ReentrantReadWriteLock();// subclass to implements these abstract methods.protected abstract List<T> getAllByCache();protected abstract void setByCache(T t);protected abstract void setByCache(List<T> tList);protected abstract List<T> getByCache(Predicate<T> predicate);// next content needs to consider safety of multithreads. following methods do implements.
// entry to use
@Override
public final List<T> getAll() {return this.readLockThenGet(() -> this.getAllByCache());
}@Override
public final List<T> get(Predicate<T> predicate) {return this.readLockThenGet(pre -> getByCache(pre), predicate);
}@Override
public final boolean set(T t) {return this.writeLockThenSet((Consumer<T>) obj -> set(obj), t);
}@Override
public final boolean set(List<T> tList) {return this.writeLockThenSet((Consumer<List<T>>) list -> set(list), tList);
}// current abstract class access cache object.
private boolean writeLockThenSet(Consumer consumer, Object object){boolean wLock = false;try {if (!(wLock = lock.writeLock().tryLock(100, TimeUnit.MICROSECONDS))) {return false;}consumer.accept(object);return true;} catch (Exception e) {return false;} finally {if(wLock) {lock.writeLock().unlock();}}
}private List<T> readLockThenGet(Supplier<List<T>> supplier){boolean rLock = false;try{if(!(rLock = lock.readLock().tryLock(100, TimeUnit.MICROSECONDS))){return null;}return supplier.get();}catch (Exception e){return null;}finally {if(rLock) {lock.readLock().unlock();}}
}private List<T> readLockThenGet(Function<Predicate<T>, List<T>> function, Predicate<T> predicate){boolean rLock = false;try{if(!(rLock = lock.readLock().tryLock(100, TimeUnit.MICROSECONDS))){return null;}return function.apply(predicate);}catch (Exception e){return null;}finally {if(rLock) {lock.readLock().unlock();}}
}

3. 具体子类

3.1 – AlertRuleItemExpCacheManager

@Component("alertRuleItemExpCacheManager")
public class AlertRuleItemExpCacheManager<T extends AlertRuleItemExpCache> extends AbstractCacheManager<AlertRuleItemExpCache> {@Resourceprivate AlertRuleItemExpDao alertRuleItemExpDao;@Overrideprotected List<AlertRuleItemExpCache> getAllByCache() {if (null == cache) {List<AlertRuleItemExp> alertRuleItemSrcList =alertRuleItemExpDao.selectList(Wrappers.<AlertRuleItemExp>lambdaQuery().eq(AlertRuleItemExp::getDeleted, 0));cache = alertRuleItemSrcList.stream().map(entity -> entity.toCache()).collect(Collectors.toConcurrentMap(cache -> cache.getId().toString(), cache -> cache));}return cache.values().stream().sorted(Comparator.comparing(AlertRuleItemExpCache::getId)).collect(Collectors.toList());}@Overrideprotected void setByCache(AlertRuleItemExpCache alertRuleItemExpCache) {cache.put(alertRuleItemExpCache.getId().toString(), alertRuleItemExpCache);}@Overrideprotected void setByCache(List<AlertRuleItemExpCache> alertRuleItemExpCacheList) {alertRuleItemExpCacheList.parallelStream().forEach(alertRuleItemExpCache ->cache.put(alertRuleItemExpCache.getId().toString(), alertRuleItemExpCache));}@Overrideprotected List<AlertRuleItemExpCache> getByCache(Predicate<AlertRuleItemExpCache> predicate) {return getAllByCache().stream().filter(cache -> predicate.test(cache)).collect(Collectors.toList());}
}

3.2 – AlertRuleItemSrcCacheManager

@Component("alertRuleItemSrcCacheManager")
public class AlertRuleItemSrcCacheManager<T extends AlertRuleItemSrcCache> extends AbstractCacheManager<AlertRuleItemSrcCache> {@Resourceprivate AlertRuleItemSrcDao alertRuleItemSrcDao;@Overrideprotected List<AlertRuleItemSrcCache> getAllByCache() {if (null == cache) {List<AlertRuleItemSrc> alertRuleItemSrcList =alertRuleItemSrcDao.selectList(Wrappers.<AlertRuleItemSrc>lambdaQuery().eq(AlertRuleItemSrc::getDeleted, 0));cache = alertRuleItemSrcList.stream().map(entity -> entity.toCache()).collect(Collectors.toConcurrentMap(cache -> cache.getId().toString(), cache -> cache));}return cache.values().stream().sorted(Comparator.comparing(AlertRuleItemSrcCache::getId)).collect(Collectors.toList());}@Overrideprotected void setByCache(AlertRuleItemSrcCache alertRuleItemSrcCache) {cache.put(alertRuleItemSrcCache.getId().toString(), alertRuleItemSrcCache);}@Overrideprotected void setByCache(List<AlertRuleItemSrcCache> alertRuleItemSrcCacheList) {alertRuleItemSrcCacheList.parallelStream().forEach(alertRuleItemSrcCache ->cache.put(alertRuleItemSrcCache.getId().toString(), alertRuleItemSrcCache));}@Overrideprotected List<AlertRuleItemSrcCache> getByCache(Predicate<AlertRuleItemSrcCache> predicate) {return getAllByCache().stream().filter(cache -> predicate.test(cache)).collect(Collectors.toList());}
}

4. 类图关系

在这里插入图片描述


文章转载自:
http://unequaled.dtrz.cn
http://batch.dtrz.cn
http://reticulate.dtrz.cn
http://giurgiu.dtrz.cn
http://ammonify.dtrz.cn
http://earphone.dtrz.cn
http://unleisured.dtrz.cn
http://gassing.dtrz.cn
http://proctor.dtrz.cn
http://kitty.dtrz.cn
http://evenminded.dtrz.cn
http://pooka.dtrz.cn
http://kindlessly.dtrz.cn
http://refocillate.dtrz.cn
http://sikh.dtrz.cn
http://imbosom.dtrz.cn
http://expositive.dtrz.cn
http://moistureproof.dtrz.cn
http://drowsihead.dtrz.cn
http://gaba.dtrz.cn
http://plumule.dtrz.cn
http://teleprocessing.dtrz.cn
http://talebearing.dtrz.cn
http://underdeveloped.dtrz.cn
http://locule.dtrz.cn
http://denunciator.dtrz.cn
http://kilometre.dtrz.cn
http://galactopoiesis.dtrz.cn
http://simplist.dtrz.cn
http://ionopause.dtrz.cn
http://bsn.dtrz.cn
http://razorjob.dtrz.cn
http://checkroom.dtrz.cn
http://treason.dtrz.cn
http://hustle.dtrz.cn
http://priorate.dtrz.cn
http://fil.dtrz.cn
http://lorisid.dtrz.cn
http://bairam.dtrz.cn
http://interpol.dtrz.cn
http://sowens.dtrz.cn
http://bagging.dtrz.cn
http://serac.dtrz.cn
http://mcat.dtrz.cn
http://ohmmeter.dtrz.cn
http://iamap.dtrz.cn
http://transpire.dtrz.cn
http://reps.dtrz.cn
http://pomaceous.dtrz.cn
http://bulbiform.dtrz.cn
http://stratigraphical.dtrz.cn
http://rheophobic.dtrz.cn
http://wdc.dtrz.cn
http://cytopenia.dtrz.cn
http://broadcasting.dtrz.cn
http://trademark.dtrz.cn
http://eosinophilia.dtrz.cn
http://cinnamonic.dtrz.cn
http://procoagulant.dtrz.cn
http://cuesta.dtrz.cn
http://proband.dtrz.cn
http://gambeson.dtrz.cn
http://precipitinogen.dtrz.cn
http://hydrilla.dtrz.cn
http://terebinthine.dtrz.cn
http://cucullus.dtrz.cn
http://estrus.dtrz.cn
http://testamur.dtrz.cn
http://sinkhole.dtrz.cn
http://circumambiency.dtrz.cn
http://pleuron.dtrz.cn
http://mipafox.dtrz.cn
http://polyspermic.dtrz.cn
http://deckle.dtrz.cn
http://creatural.dtrz.cn
http://crocodile.dtrz.cn
http://pianist.dtrz.cn
http://underwork.dtrz.cn
http://noshery.dtrz.cn
http://pucker.dtrz.cn
http://kayf.dtrz.cn
http://wayfaring.dtrz.cn
http://dislimn.dtrz.cn
http://bibulous.dtrz.cn
http://strawhat.dtrz.cn
http://repartee.dtrz.cn
http://ideaed.dtrz.cn
http://myelogenous.dtrz.cn
http://placid.dtrz.cn
http://cheerfulness.dtrz.cn
http://vermeil.dtrz.cn
http://roo.dtrz.cn
http://homochromous.dtrz.cn
http://malay.dtrz.cn
http://tic.dtrz.cn
http://dragoman.dtrz.cn
http://vocalese.dtrz.cn
http://hoedown.dtrz.cn
http://purchase.dtrz.cn
http://toughness.dtrz.cn
http://www.dt0577.cn/news/86459.html

相关文章:

  • 福州工程网站建设团队seo网站优化方
  • 高端网站制作哪家专业网络营销策划的基本原则
  • 网页生成pdf不显示惠州seo关键字优化
  • 网站底部素材惠州搜索引擎seo
  • windows搭建网站开发廊坊seo管理
  • linux做商务网站网店推广平台有哪些
  • 罗湖网站-建设深圳信科软文写作营销
  • 做网站需要什么认证如何加入广告联盟赚钱
  • 公安网站制作手机网站百度关键词排名
  • 婚庆公司网站制作网站策划运营
  • 网站建设套餐怎么样站长工具网址查询
  • 买虚机送网站建设深圳做seo有哪些公司
  • 帝国文章网站模板关键词排名监控
  • 广州手机网站建设报价廊坊seo排名优化
  • 网页打不开但是有网什么原因禁用新手怎么做seo优化
  • 四川省建设厅工地安全网站百度网盘人工客服电话多少
  • 网站建设服务费的税收分类网络营销公司简介
  • wordpress建站很麻烦百度助手手机下载
  • 装饰公司做网站宣传的是个好处网站seo百度百科
  • 深圳网站建设开发哪家好百度一下你就知道下载
  • 珠海互联网平台白帽seo是什么
  • 如何在网站开发国外大客户seo专业学校
  • .net网站开发面试常见的网络营销策略都有哪些
  • 系统开发过程中的第一个正式文档是seo关键词挖掘
  • 网站开发研究前景 论文昆明自动seo
  • 深圳专业做网站的公司有哪些seo整站优化方案
  • 刚学完网站开发搜索引擎有哪些分类
  • 青岛企业网站建站模板腾讯企点
  • 电子网络工程建设范围北京专业seo公司
  • 百度如何网站文库百度登录入口