设计模式之工厂模式

目录

使用场景

简单工厂模式

工厂方法模式

抽象工厂模式


参考:

Java设计模式(工厂模式) - IT_longlong - 博客一.简单工厂模式 简单工厂模式就是把对类的创建初始化全都交给一个工厂来执行,而用户不需要去关心创建的过程是什么样的,只用告诉工厂我想要什么就行了。而这种方法的缺点也很明显,违背了设计模式的开闭原则,因https://www.cnblogs.com/long88-club/p/11055555.html

使用场景

  当我们直接new一个对象比较麻烦时,比如构造方法传参数量太多,或者在构建对象之前需要进行一些其他的操作。再比如创建一个类A要先创建类B,这种使用new比较麻烦时就可以交给工厂去做,还减少了代码的重复。

代码示例:

DesignPattern/src/com/atguigu/factory at main · VeniVeci/DesignPattern · GitHub

简单工厂模式

  简单工厂模式就是把对类的创建初始化全都交给一个工厂来执行,而用户不需要去关心创建的过程是什么样的,只用告诉工厂我想要什么就行了。而这种方法的缺点也很明显,违背了设计模式的开闭原则,因为如果你要增加工厂可以初始化的类的时候,你必须对工厂进行改建

      简单工厂很简单,根据输入的参数进行相应对象的构建,所以一旦有其他的对象需要加入到工厂中,那么就需要对工厂进行改建,不符合开闭原则

拿制作披萨来举例:

核心代码:

 

工厂方法模式

   设计一个工厂的接口,你想要什么东西,就写个类继承于这个工厂,这样就不用修改什么,直接添加就行了。就相当于,我这个工厂是用来生汽车的,而要什么品牌的汽车具体分到了每个车间,如果新多了一种品牌的汽车,直接新增一个车间就行了。那么问题又来了,如果想要生产其他的产品怎么办,比如船舶, 飞机等。

      工厂的结构稍微复杂了一点,只需要基于工厂自己搞一个车间即可进行对象的制造,一个车间可以制造一个对象,如果有其他对象也需要构建,那么只需要自己也基于工厂构建一个车间即可,符合开闭原则。

 

 具体使用

	public static void main(String[] args) {
		String loc = "bj";
		if (loc.equals("bj")) {
			//创建北京口味的各种Pizza
			new BJOrderPizza();
		} else {
			//创建伦敦口味的各种Pizza
			new LDOrderPizza();
		}
	}

 

抽象工厂模式

  抽象工厂与工厂方法的区别,就在于产品簇的问题,多了一种产品,这时候怎么办呢,就是在接口类里面加上创建大炮的方法,然后每个车间就可以有两个子车间分别来生产汽车和大炮。这样的话缺点也很显然的冒了出来,如果我又想生产飞机,那么我要需要更改所有的工厂车间以及工厂接口。

      工厂的结构更加复杂了,工厂方法模式可以生成一种类型的对象(只有一个接口),如果需要其他类型的产品(其他接口),那么就需要抽象工厂模式

这里加了一个absFactory。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

trigger333

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值