设计模式原则之开放-封闭原则

  程序扩展对外开放,修改对外封闭

ResolverUtil

其中有一个接口、两个内部类,Class对象和Annotation对象被封装成了Test对象

Test

两个实现类,核心功能是匹配Class类型

IsA

public static class IsA implements Test {private Class<?> parent;/** Constructs an IsA test using the supplied Class as the parent class/interface. */public IsA(Class<?> parentType) {this.parent = parentType;}/** Returns true if type is assignable to the parent type supplied in the constructor. */@Overridepublic boolean matches(Class<?> type) {return type != null && parent.isAssignableFrom(type);}@Overridepublic String toString() {return "is assignable to " + parent.getSimpleName();}
}

AnnotatedWith

public static class AnnotatedWith implements Test {private Class<? extends Annotation> annotation;/** Constructs an AnnotatedWith test for the specified annotation type. */public AnnotatedWith(Class<? extends Annotation> annotation) {this.annotation = annotation;}/** Returns true if the type is annotated with the class provided to the constructor. */@Overridepublic boolean matches(Class<?> type) {return type != null && type.isAnnotationPresent(annotation);}@Overridepublic String toString() {return "annotated with @" + annotation.getSimpleName();}
}

使用

String packageName = "com/wjz/mybatis/type/scan";
ResolverUtil<Class<?>> resolverUtil = new ResolverUtil<Class<?>>();
resolverUtil.find(new ResolverUtil.IsA(CommonService.class), packageName);
Set<Class<? extends Class<?>>> handlerSet = resolverUtil.getClasses();

如此设计

我们可以实现Test接口,传参find方法时传入,而不用修改ResolverUtil的内部方法。

package com.wjz.mybatis.type.scan;import org.apache.ibatis.io.ResolverUtil.Test;public class Testtest implements Test {@Overridepublic boolean matches(Class<?> type) {if (type == Testtest.class) {return true;}return false;}}

转载于:https://www.cnblogs.com/BINGJJFLY/p/9905198.html

Mybatis ResolverUtil的设计概念相关推荐

  1. MyBatis的架构设计以及实例分析--转

    原文地址:http://blog.csdn.net/luanlouis/article/details/40422941 MyBatis是目前非常流行的ORM框架,它的功能很强大,然而其实现却比较简单 ...

  2. 《深入理解mybatis原理》 MyBatis的架构设计以及实例分析

    MyBatis是目前非常流行的ORM框架,它的功能很强大,然而其实现却比较简单.优雅.本文主要讲述MyBatis的架构设计思路,并且讨论MyBatis的几个核心部件,然后结合一个select查询实例, ...

  3. 关于购物网站的设计概念

    关于购物网站的设计概念 完成时间:2019年4月2日 作者: 在网上常见的购物网站有淘宝,京东,国美,苏宁易购等等之类的网站首先我来讲解一下国美这个购物首页,国美电器(GOME)成立于1987年1月1 ...

  4. 暗黑类游戏的设计概念

    <暗黑破坏神>已面世20年了,但是它的带来的游戏设计概念依旧在影响着现在很多游戏. 游戏设计总览 暗黑破坏神是一款角色扮演游戏,其中玩家将会创建一个独立的角色并引领他在地牢副本中去尝试寻找 ...

  5. 设计的萌芽阶段_第一章 设计的萌芽阶段 第一节 设计概念的产生

    第一节 设计概念的产生 在设计概念的产生过程中,劳动起着决定性的作用.劳动创造了人,而人类为了自身的生存就必须与自然界做斗争.人类最初只会用天然的石块或棍棒作为工具,以后渐渐学会了拣选石块.打制石器, ...

  6. 设计心理学中的映射交互设计概念|优漫动游

    我们经常会谈到用户体验,其实好的用户体验与设计映射是有很大关系的,今天的设计法则-映射,希望能为你提升产品用户体验度带来一点思考.今天我们来了解一下,设计心理学中的第三个交互设计概念:映射. 同样,这 ...

  7. 红点奖设计概念奖设计之星奖

    1.引言 有角动物智能放牧机器人的最后设计稿获得了设计概念奖设计之星奖,今年该最高奖项的获奖率不到0.8%. 这一方面体现了我公司在动物穿戴设计领域的领先,也体现了我们对动物自身感受的感知获得了国际上 ...

  8. ui设计概念是什么?ui设计包括哪些设计?

    ui设计概念是什么?相信这是初入ui设计的小白所疑惑的,想学们好的技巧,却不知道这个到底是什么?那么作为一个从小白到熟练ui设计的过来人,接下来为大家说说关于ui设计概念是什么的知识,其实这个概念很简 ...

  9. 软件设计概念-指导原则|Aspects|设计元素

    软件设计概念 软件设计概念 设计过程的任务集 软件设计的指导原则 设计基本理念 模块化设计原则 信息隐藏原则 步进式的细化原则 功能独立原则 重构原则 Aspects 设计元素 数据元素 架构元素 接 ...

最新文章

  1. stripes framework(框架)入门教程(附案例分析)
  2. 怎样将项目上传到github上
  3. 京东宣布收购拇指阅读,具体金额未披露
  4. String... 参数定义中有三个点的意思
  5. jq在html中添加dom元素,使用jQuery添加DOM元素的最佳方法
  6. 单体内置对象_单体内置对象
  7. Mybatis批量删除Oracle语句,mybatis-oracle(ssi2)批量删除
  8. OSChina 周二乱弹 —— 做人呐,最重要的就是开森
  9. [原]减小VC6编译生成的exe文件的大小
  10. 小学数学与计算机整合课优质教案,优秀小学数学教学案例【小学数学教学与信息技术的结合】...
  11. Cadence Allegro PCB 17.4的叠层、正片和负片的设计
  12. 香槟分校计算机科学排名,伊利诺伊大学厄巴纳香槟分校计算机科学computer science专业排名第29名(2020THE泰晤士高等教育世界大学排名)...
  13. 设计模式之旅(三)--观察者模式
  14. linux搭建kubernetes集群(一主二从)
  15. 收藏一个Ping的小工具类,可用于网络中检测目的设备是否在线
  16. 2021 强网杯 pwn notebook
  17. 如何给微信公众号增加留言功能?
  18. 51单片机仿真例程-开关控制
  19. 什么是多租户saas架构设计
  20. python计算n的阶乘

热门文章

  1. Android开发之旅:组件生命周期(二)
  2. 微信小程序 时间选择
  3. dz mysql日志清理_Discuz教程:如何准确的清理数据库
  4. 检查邮箱是否包含教育后缀.edu结尾的邮箱
  5. Google common_schema 2.2 documentation
  6. 函数动态传参详细,作用域和名称空间,global和nonlocal
  7. linux系统性能优化及瓶颈分析
  8. 转: 网卡名字eth0,eth1的修改方法
  9. 34.16.159(zz)
  10. DotNetNuke各项业务外包