java开发,必须要懂的23种设计模式——工厂模式(简单工厂模式)

   日期:2020-05-26     浏览:112    评论:0    
核心提示:工厂模式是什么?讲解工厂模式之前,我们先来了解一下工厂是干什么的。简单来说,就是集中高效的生产产品。也就是说,在编程中,工厂模式,就是效仿工厂,进行集中、高效实例化对象。(实例化就是生产产品)工厂模式小案例...设计模式

目录

工厂模式是什么?

简单工厂模式小案例

提出问题:简单工厂模式,把简简单单的一个new,写的这么复杂,到底有什么好?

总结一下简单工厂模式的缺点:

代码

 

工厂模式是什么?

讲解工厂模式之前,我们先来了解一下工厂是干什么的。

 

简单来说,就是集中高效的生产商品。

 

也就是说,在编程中,工厂模式,就是效仿工厂,进行集中、高效实例化对象。(实例化就是生产商品)

 

简单工厂模式小案例

首先,咱们先来确定一下要干什么。

1. 创建一个工厂——江南皮革厂(皮革工厂)。

2. 江南皮革厂要生产一些皮制品。

3. 皮制品包括真皮钱包和貂皮大衣。

4. 找个消费者来消费。

 

江南皮革厂

package factory.simpleFactory;

public class 江南皮革厂 {
	public static Skin getSkin(String name) {
		if(name.equals("真皮钱包")) {
			return new Wallet("真皮钱包","800¥");
		}else if(name.equals("貂皮大衣")) {
			return new Coat("貂皮大衣","80000¥");
		}else {
			return null;
		}
	}
}

皮制品要遵守一定的规范——要有名字和价格

package factory.simpleFactory;

public interface Skin {
	public void name();
	public void pice();
}

皮革制品1——真皮钱包

package factory.simpleFactory;

public class Wallet implements Skin {
	
	public String name;
	public String pice;
	
	public Wallet(String name ,String pice) {
		this.name=name;
		this.pice=pice;
	}
	
	@Override
	public void name() {
		System.out.println("名字:"+name);
	}

	@Override
	public void pice() {
		System.out.println("价格:"+pice);
	}

}

皮革制品2——貂皮大衣

package factory.simpleFactory;

public class Coat implements Skin {
	
	public String name;
	public String pice;
	
	public Coat(String name ,String pice) {
		this.name=name;
		this.pice=pice;
	}
	
	@Override
	public void name() {
		System.out.println("名字:"+name);
	}

	@Override
	public void pice() {
		System.out.println("价格:"+pice);
	}

}

消费者

package factory.simpleFactory;

public class Consumer {

	public static void main(String[] args) {
		Skin wallet = 江南皮革厂.getSkin("真皮钱包");
		
		wallet.name();
		wallet.pice();
		
		Skin coat = 江南皮革厂.getSkin("貂皮大衣");
		
		coat.name();
		coat.pice();
		
	}

}

如果你不理解Skin 接口为什么可以赋值为Wallet类和Coat类对象,你需要了解一下Java的向上转型知识:https://blog.csdn.net/qq_42909053/article/details/106325632

 

项目目录结构如下

提出问题:简单工厂模式,把简简单单的一个new,写的这么复杂,到底有什么好?

自己的理解:

1. 如果项目非常非常大。需要多个团队协作开发。

感觉文字叙述,有点说不清,看图吧

这个A团队的锅,让A团队自己背。A团队开发一个中转类。工厂类。

你不需要知道我们开发的有什么类,也不需要知道我们的命名有多么奇葩,你只需要调用接口,输入你想要的东西,工厂就能返回给你。

 

总结一下就是,调用者不需要知道类到底是怎么实现,怎么命名,和业务逻辑,只管调用就行。

 

好吧,这个例子是我想破脑袋才想出来的,网上解释很多,但是我现在的水品还不怎么理解。希望有能力的大哥大姐指正,教育。

 

网上的答案:

1. 实例化对象不用new,用工厂方法代替

我的疑问:本质不还是new?为什么要多加个工厂?

2. 将选择类,创建对象统一管理和控制。从而将调用者和实现类解耦。

我的疑问:这样解耦后有什么好处?

3. 隐藏具体类名,很多类隐藏得很深的,而且可能会在后续版本换掉

我的疑问:隐藏类名干什么?自己后期维护不麻烦吗?

4. 避免你辛苦的准备构造方法的参数

我的疑问:既然能用工厂模式去赋值参数,说明这些参数是默认值,那为什么不直接在实体类里边去声明加赋值??

 

我很水,简单工厂模式会写,不会灵活运用,不理解的太多,就不一一摆出来了。继续总结我的简单工厂模式吧。

 

 

总结一下简单工厂模式的缺点:

 

不满足开闭原则:一个软件的实体应对扩展开放,对修改关闭。

 

实际情况:实际开发过程中,工厂模式中,简答工厂应用的最多,因为开发简单。虽然不满足开不原则。

 

代码

代码稍后我会放在码云上,有兴趣的话,可以浏览或下载。

 

 
 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
更多>相关资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服