由mybatis架构引发的工厂模式介绍

导读:本篇文章讲解 由mybatis架构引发的工厂模式介绍,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com


前言

接触mybatis框架已近过了好长时间了,但是对于mybatis的架构图(如下Mybatis的架构图)还是不太懂,这个框架的为什么要多做了好多无用功,建各种容器那不太懂,后来发现原来是mybatis引入了,一个设计模式——>工厂模式,这样目标一下就清晰了,干工厂模式
在这里插入图片描述


一、工厂模式介绍

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。主要解决接口接口选择问题,定义一个创建对象的接口,让其子类决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。

二、使用工厂模式的优缺点

1.优点

1、一个调用者想创建一个对象,只要知道其名称就可以了。

2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。

3、屏蔽产品的具体实现,调用者只关心产品的接口

2.缺点

每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。

三、关于工厂模式理解(实景+代码演示)

实现
我们将创建一个 SmartPhone 接口和实现 SmartPhone接口的实体类。下一步是定义工厂类 Mom。Player 类使用 Mom 来获取 game 对象。它将向 Mom传递信息,以便获取它所需对象的类型,如下图所示
在这里插入图片描述

实景
我们的实景是,小明想要玩最喜欢的三个游戏分别是王者,吃鸡,原神,但是玩游戏得大前提是有个智能手机,但是的但是,有了手机这个手机却被他的妈妈管着,不能随心所欲的玩手机,得同意才能玩。

弄手机

代码如下(创建一个手机(创建一个关于游戏的接口)):

package com.cc;
/**
 * 
 * @author 老赖的小弟
 *造出一个手机
 */
public interface SmartPhone {
	// 只有一个方法play
	void play();
}

安装游戏

代码如下(安装王者):

package com.cc;
/**
 * 
 * @author 老赖的小弟
 *1、实现SmartPhone接口
 *2、重写play方法
 */

public class HonorOfKings implements SmartPhone {

	@Override
	public void play() {
		System.out.println("玩王者荣耀");
		
	}

}

代码如下(安装吃鸡):

package com.cc;
/**
 * 
 * @author 老赖的小弟
 *1、实现SmartPhone接口
 *2、重写play方法
 */
public class GameForPeace implements SmartPhone {

	@Override
	public void play() {
		System.out.println("玩和平精英");
		
	}

}

代码如下(安装原神):

package com.cc;
/**
 * 
 * @author 老赖的小弟
 *1、实现SmartPhone接口
 *2、重写play方法
 */
public class OriginalGod implements SmartPhone {

	@Override
	public void play() {
		System.out.println("玩元神");
		
	}

}

得不了玩游戏

代码如下(由于表现不好这次请求玩游戏遭到拒绝):

package com.cc;
/**
 * 
 * @author 老赖的小弟
 *1、实现SmartPhone接口
 *2、重写play方法
 */
public class GameOver implements SmartPhone {

	@Override
	public void play() {
		System.out.println("作业做完了?!!!^_^");
		
	}

}

手机目前是在妈妈手里(对象实现工厂)

代码如下(对象实现工厂):

package com.cc;
/**
 * 
 * @author 老赖的小弟
 *1、构建成员变量
 *2、使用switch...case进行选择判断
 */
public class Mom {
	public static final int HK = 1;
	public static final int GP = 2;
	public static final int OG = 3;
	
	public static SmartPhone getGame(int game) {
		switch(game) {
		case HK:
			return new HonorOfKings();
		case GP:
			return new GameForPeace();
		case OG:
			return new OriginalGod();
		default:
			return new GameOver();
		}	
	}
}

小明请求玩游戏

代码如下(小明的两次请求):

package com.cc;

public class Player {
	public static void main(String[] args) {
		// 调用getGame方法输入参数,调用工厂类方法
		SmartPhone player1 = Mom.getGame(Mom.HK);
		player1.play();
		SmartPhone player2 = Mom.getGame(6);
		player2.play();
		
	}

}

代码如下(得到的回应):

玩王者荣耀
作业做完了?!!!^_^

总结

小明真是个贪玩的的孩子,玩一次不够还想再玩,哈哈,不过这里面看着是工厂模式,但是再往深一点看,这不就是接口和抽象类的结合使用嘛,
接口不就是“规矩”,作用:就是解耦合,提高程序的可扩展性,
抽象类作用:就是降低接口实现类对接口实现过程的难度,具体就是将接口中不需要使用抽象方法交给抽象类进行完成,这样接口实现类只需要对接口实现类所需要方法进行重写

关于接口和抽象类的区别可以看看下面这篇文章:
Java中抽象类与接口的区别

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/5079.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!