设为首页 加入收藏

TOP

外观模式(二)
2023-09-23 15:43:20 】 浏览:92
Tags:
vate TheaterLight() { } public void on(){ System.out.println("打开灯光"); } public void off(){ System.out.println("关闭灯光"); } public void dim(){ on();//先打开再调暗 System.out.println("调暗灯光"); } public void bright(){ System.out.println("调量灯光"); } } /** * @author 长名06 * @version 1.0 * dvd播放器 */ public class DVDPlayer { private static DVDPlayer dvdPlayer = new DVDPlayer(); public static DVDPlayer getDvdPlayer(){ return dvdPlayer; } private DVDPlayer(){ } public void on(){ System.out.println(" dvd播放器 打开"); } public void off(){ System.out.println(" dvd播放器 关闭"); } public void pause(){ System.out.println(" dvd播放器 暂停"); } public void play(){ System.out.println(" dvd播放器 播放"); } } //调用者 public class Client { public static void main(String[] args) { HomeTheaterFacade homeTheaterFacade = new HomeTheaterFacade(); homeTheaterFacade.ready(); System.out.println("--------"); homeTheaterFacade.play(); System.out.println("--------"); homeTheaterFacade.pause(); System.out.println("--------"); homeTheaterFacade.end(); } }

外观模式在Mybatis框架的源码分析

  //org.apache.ibatis.session.Configuration类的方法
  public MetaObject newMetaObject(Object object) {
    return MetaObject.forObject(object, objectFactory, objectWrapperFactory, reflectorFactory);
  }
//MetaObject的forObject方法
public static MetaObject forObject(Object object, ObjectFactory objectFactory, ObjectWrapperFactory objectWrapperFactory, ReflectorFactory reflectorFactory) {
    if (object == null) {
      return SystemMetaObject.NULL_META_OBJECT;
    } else {
      return new MetaObject(object, objectFactory, objectWrapperFactory, reflectorFactory);
    }
  }
 //会调用到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.当系统需要进行分层设计时,可以考虑外观模式。
  • 5.在维护一个遗留的大型系统时,可能这个系统已经变得非常难以维护和扩展,此时可以考虑为新系统开发一个Facade类,来提供遗留系统的比较清晰简单的接口,让新系统和Facade类交互,提高复用性。
  • 6.不能过多的或者不合理的使用外观模式,要以让系统有层次,利于维护为目的,考虑是使用外观模式好,还是直接调用模块好。

只是为了记录自己的学习历程,且本人水平有限,不对之处,请指正。

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Java 21 新特性:switch的模式匹配 下一篇76基于java的在线心理健康咨询系..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目