java设计模式之--工厂模式 (真的不能再详细了)

java设计模式系列分享,看完你不懂,那就是我的错了。

一、工厂模式的思想

  • 实例化对象用工厂方法代替new操作
  • 将选择实现类、创建对象统一管理和控制,从而将调用者跟我们的实现类解耦

我的白话文解释: 1.什么叫工厂? 工厂就是批量生产的地方,你只需提交所需货物的厂单(产品数据参数等),该厂就能够生产你所需的东西。

二、工厂模式分类

  1. 简单工厂模式
  2. 抽象工厂模式
  3. 工厂方法模式

一看这么多,是不是怕了咧,反正都是工厂模式,你掌握它的思想就不用担心了

三、代码说话(以简单工厂模式为例)

简单工厂模式也叫静态工厂模式,就是工厂类一般是使用静态方法,接收的参数不同(或调用的方法不同)来返回不同的对象实例

  • 没有工厂的情况下(也就是一般操作)
package mode_study;
/**
 * 工厂模式的核心:
  * 1.实例化对象用工厂方法代替new操作
  *2.将选择实现类、创建对象统一管理和控制,从而将调用者跟我们的实现类解耦
 * @author 放牛娃学编程(微信公众号)
 *
 */
//定义一个汽车接口
interface Car{
	public void getName();
}

//定义宝马车类
class bM implements Car{
	@Override
	public void getName() {
		// TODO Auto-generated method stub
		System.out.println("我是宝马车啦啦,我由放牛娃生产");
		
	}
}

//再定义一个奔驰车类
class bChi implements Car{
	@Override
	public void getName() {
		// TODO Auto-generated method stub
		System.out.println("我是奔驰车哟!,我也由放牛娃生产");
	}
	
}

public class Factory_study {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		//开始创建实例(没有工厂的情况)
//		Car bM = new bM();
//		bM.getName();
//		Car bChi = new bChi();
//		bChi.getName();
		
		//这样也可以创建,其实跟上面是一样的
		new bM().getName();
		new bChi().getName();
	}
}

分析: 假设我们有很多种汽车,那我们创建实例的时候是不是要在客户端new很多下,那它为什么不好呢?

  1. 因为当你想更换对象时,你就必须修改客户端中的执行代码
  2. 我们最关心的是如何取得Car接口对象,至于说这个接口对象是被谁实例化的,那不是客户端的工作 (难道你每次使用电脑,都非要搞懂电脑是如何运行的你才肯用吗??
  • 加个工厂类
//定义一个工厂类
class carFactory{
	public static Car getCar(String name)
	{
		if(name == "宝马")
		{
		//返回宝马实例
			return new bM();
		}
		else if(name == "奔驰")
		{
		//返回奔驰实例
			return new bChi();
		}
		else
		{
		//如果还有接口的实现类,那就可以继续往下加
			return null;
		}
	}
}

主函数:

public class Factory_study {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		carFactory carfactory = new carFactory();
		carfactory.getCar("宝马").getName();
		carfactory.getCar("奔驰").getName();
	}
}

分析: 1. 有了工厂之后,我不需要每次要一款汽车都new一下,让new的工作交给工厂,我需要什么,工厂就替我生产什么。(这样不香吗,哈哈哈)
2. 通过一个工厂类就可以简单快速的创建对象。

四、优缺点

优点:

  • 简化创建流程,一步到位
  • 屏蔽创建过程

缺点:

  • 低扩展性,违背开闭原则
  • 容易造成代码臃肿,不移维护

缺点可以在其它两种的工厂模式中得到改善,有兴趣的可以去看看相关博文。

五、分享交流

最后有兴趣一起交流的,可以关注我的公众号:这里你能够学到很实用的技巧,不是常用的我不说,公众号回复提取码即可获取以下学习资料啦啦啦啦,喜欢就拿去吧!!

(链接时常会失效,若出现此类情况,可以加我微信:17722328325(加时请备注:学习资料))

  1. Java web从入门到精通电子书

  2. Python机器学习电子书

  3. Python400集(北京尚学堂)

  4. JavaScript项目案例、经典面试题

  5. Java300集(入门、精通)

  6. Java后端培训机构录集(同事培训内部提供)

在这里插入图片描述

发布了39 篇原创文章 · 获赞 13 · 访问量 4840

猜你喜欢

转载自blog.csdn.net/qiukui111/article/details/104401596
今日推荐