- MyBatis 中的Configuration 去创建MetaObject 对象使用到外观模式
| public class Configuration { |
| protected ReflectorFactory reflectorFactory = new DefaultReflectorFactory(); |
| protected ObjectFactory objectFactory = new DefaultObjectFactory(); |
| protected ObjectWrapperFactory objectWrapperFactory = new DefaultObjectWrapperFactory(); |
| public MetaObject newMetaObject(Object object) { |
| return MetaObject.forObject(object, objectFactory, objectWrapperFactory, reflectorFactory); |
| } |
| } |
| |
| public class MetaObject{ |
| private MetaObject(Object object, ObjectFactory objectFactory, ObjectWrapperFactory objectWrapperFactory, ReflectorFactory reflectorFactory) { |
| this.originalObject = object; |
| this.objectFactory = objectFactory; |
| this.objectWrapperFactory = objectWrapperFactory; |
| this.reflectorFactory = reflectorFactory; |
| if (object instanceof ObjectWrapper) { |
| this.objectWrapper = (ObjectWrapper) object; |
| } else if (objectWrapperFactory.hasWrapperFor(object)) { |
| this.objectWrapper = objectWrapperFactory.getWrapperFor(this, object); |
| } else if (object instanceof Map) { |
| this.objectWrapper = new MapWrapper(this, (Map) object); |
| } else if (object instanceof Collection) { |
| this.objectWrapper = new CollectionWrapper(this, (Collection) object); |
| } else { |
| this.objectWrapper = new BeanWrapper(this, object); |
| } |
| } |

| 1) 外观模式对外屏蔽了子系统的细节,因此外观模式降低了客户端对子系统使用的复杂性 |
| 2) 外观模式对客户端与子系统的耦合关系 - 解耦,让子系统内部的模块更易维护和扩展 |
| 3) 通过合理的使用外观模式,可以帮我们更好的划分访问的层次 |
| 4) 当系统需要进行分层设计时,可以考虑使用 Facade 模式 |
| 5) 在维护一个遗留的大型系统时,可能这个系统已经变得非常难以维护和扩展,此时可以考虑为新系统开发一个Facade 类,来提供遗留系统的比较清晰简单的接口,让新系统与 Facade 类交互,提高复用性 |
| 6) 不能过多的或者不合理的使用外观模式,使用外观模式好,还是直接调用模块好。要以让系统有层次,利于维护为目的 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
2021-08-31 vue开发:前端项目模板