23种设计模式

注:本文一些观点是从网络上学习而来,一些是本人自己的观点,如有建议或意见,欢迎交流。

1 建造者模式

1.1 需求

  打豆浆有三步:选原料,搅拌,加热。现在要打红豆豆浆,绿豆豆浆,黑豆豆浆。编写程序,实现这个需求。

1.2 普通设计思路


分析:
  把产品和创建产品的过程耦合在了一起,对程序的扩展和维护不好。

1.3 使用建造者模式的设计思路

思路:
  将产品和创建产品的过程解耦,使用建造者模式,实现同样的过程创建不同的对象。
在这里插入图片描述
四个角色:Product、Builder、ConcreteBuilder、Director

1.4 建造者模式思想在Mybatis中的应用

  SqlSessionFactoryBuilder中的build方法使用了建造者模式的思想,尽管代码层面并不是标准的建造者模式。
  我认为XMLConfigBuilder也使用了类似建造者模式的设计,类图如下:
在这里插入图片描述

2 简单工厂模式

2.1 需求

  多种汉堡,包括鳕鱼堡,奥尔良鸡肉堡,牛肉堡。制作流程为选材,做熟,搭配在一起。实现汉堡订购功能。

2.2 普通设计思路

在这里插入图片描述分析:
  违背了OCP原则,即对扩展开放,对修改关闭。如果要新增一个种类的汉堡,首先要新增鳕鱼堡类,然后订购汉堡类需要加入对鳕鱼堡类的操作,那么所有的订购汉堡类都需要修改,即创建汉堡的地方往往有多处,因此都需要修改。将创建汉堡的代码封装在一起,即使用简单工厂模式。

2.3 使用简单工厂模式的设计思路

  简单工厂模式是由工厂对象决定创建哪一种产品的设计模式。
在这里插入图片描述

2.4 简单工厂模式在Mybatis中的应用

  DefaultSqlSessionFactory中使用openSessionFromDataSource方法创建出SqlSession对象。

private SqlSession openSessionFromDataSource(ExecutorType execType, TransactionIsolationLevel level, boolean autoCommit) {
    Transaction tx = null;
    try {
      final Environment environment = configuration.getEnvironment();
      final TransactionFactory transactionFactory = getTransactionFactoryFromEnvironment(environment);
      tx = transactionFactory.newTransaction(environment.getDataSource(), level, autoCommit);
      final Executor executor = configuration.newExecutor(tx, execType);
      return new DefaultSqlSession(configuration, executor, autoCommit);
    } catch (Exception e) {
      closeTransaction(tx); // may have fetched a connection so lets call close()
      throw ExceptionFactory.wrapException("Error opening session.  Cause: " + e, e);
    } finally {
      ErrorContext.instance().reset();
    }
  }

3 工厂方法模式

3.1 需求

  接上面需求,如果可以买不同口味的汉堡,比如有北京的鳕鱼堡,北京的牛肉堡,天津的狗肉堡等。

3.2 使用简单工厂模式的情形

  北京会有一个简单工厂,天津会有一个,最后会有很多简单工厂,工厂过多。解决办法是:定一个创建对象的抽象方法,在子类中具体实现,将对象的实例化推迟到子类,即工厂方法模式。

4 抽象工厂模式

4.1 需求

  同上面的需求。

4.2 使用抽象工厂模式设计

  将简单工厂模式和工厂方法模式结合起来。
在这里插入图片描述

4.3 抽象工厂模式在Mybatis中的应用

在这里插入图片描述

5 外观模式

5.1 需求

  想要有条理地使一个大系统运转起来,要想使这个系统运转起来,需要多个小系统协同工作才可以。如果使用者直接去对接各个小系统,会很麻烦。可以使用外观模式。提供一个外观界面给使用者,在这个界面后去调度各个小系统,使用者只需要对接这个外观界面,不需要对面繁多的各个小系统。

5.2 使用外观模式的设计思路

外观模式类图
外观类:为调用端提供统一的接口,将请求代理给正确的子系统。
客户端:外观类的调用者。
子系统集合:一系列子系统,服务的提供者。

5.3 外观模式在Mybatis中的应用

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值