Java一天GET一个设计模式之工厂模式

it2026-04-06  4

什么是工厂模式?

工厂模式又名工厂方法,是⼀种创建型设计模式,其在父类中提供⼀个创建对象的方法,由子类决定实例化对象的类型。

为什么要用工厂模式?

这种设计模式也是 Java 开发中最常见的⼀种模式,它的主要意图是定义⼀个创建对象的接口,让其子类自己决定实例化哪⼀个工厂类,工厂模式使其创建过程延迟到子类进行。

简单说就是为了提供代码结构的扩展性,屏蔽每⼀个功能类中的具体实现逻辑。让外部可以更加简单的只是知道调用即可。当然这可能也有⼀些缺点,比如需要实现的类非常多,如何去维护,怎样减低开发成本。但这些问题都可以在后续的设计模式结合使用中,逐步降低。

怎么样使用工厂模式

在提到怎样使用前,假设一个业务场景

蝼蚁压抑了就想吃香蕉去健身 上班累了就想吃木瓜去按摩 开心了就想吃草莓然后回家种草莓 多种类型的水果,味道,吃完后想去做的事是不一样的

假设按照正常的逻辑实现

public static void main(String[] args) { WlltAnt wlltAnt = new WlltAnt(); wlltAnt.setStatus(1); WlltAnt wlltAnt2 = new WlltAnt(); wlltAnt2.setStatus(2); WlltAnt wlltAnt3 = new WlltAnt(); wlltAnt3.setStatus(3); eat(wlltAnt); eat(wlltAnt2); eat(wlltAnt3); } static void eat(WlltAnt ant) { if (1 == ant.getStatus()) { //压抑的蝼蚁 Banana banana = new Banana(ant); banana.goExercise(); } else if (2 == ant.getStatus()) { //累了的蝼蚁 Papaya papaya = new Papaya(ant); papaya.goMassage(); } else if (3 == ant.getStatus()) { //开心的蝼蚁 Strawberry strawberry = new Strawberry(ant); strawberry.goStrawberry(); } }

运行结果:

吃了根香蕉去健身了 吃了个木瓜去按摩了 吃了个草莓去种草莓了

项目经理突然抽风:改个需求吧 蝼蚁分别想吃不同口味的不同的数量的去坐不同的事

public static void main(String[] args) { WlltAnt wlltAnt = new WlltAnt(); wlltAnt.setStatus(1); //添加口味 wlltAnt.setFlavor("糯糯的"); WlltAnt wlltAnt2 = new WlltAnt(); wlltAnt2.setStatus(2); wlltAnt2.setFlavor("香香的"); //添加数量 wlltAnt2.setNum(3); WlltAnt wlltAnt3 = new WlltAnt(); wlltAnt3.setStatus(3); wlltAnt3.setFlavor("酸酸的"); //做不同的事 wlltAnt3.setTodo("去干点不可描述的事"); eat(wlltAnt); eat(wlltAnt2); eat(wlltAnt3); } static void eat(WlltAnt ant) { if (1 == ant.getStatus()) { //压抑的蝼蚁 Banana banana = new Banana(ant); banana.goExercise(); } else if (2 == ant.getStatus()) { //累了的蝼蚁 Papaya papaya = new Papaya(ant); papaya.goMassage(); } else if (3 == ant.getStatus()) { //开心的蝼蚁 Strawberry strawberry = new Strawberry(ant); strawberry.goStrawberry(); } }

运行结果:

吃了根糯糯的香蕉去健身了 吃了3个香香的木瓜去按摩了 吃了个酸酸的草莓去干点不可描述的事

项目经历再次抽风再改需求:现在又来了三十只蝼蚁

发现项目经历每次抽风都要在原有的代码上去改动(破坏了开闭原则),三十只蝼蚁就意味着去添加三十个对象(ps:阔以搞个循环嘛),但是需要添加着不同的属性,循环这里就不再那么适合了,这个时候就可以假如工厂模式,添加一个蝼蚁工厂类,让工厂去给我建立对象,我们只需要做选择就好了。。

蝼蚁工厂

static WlltAnt createAnt(String type) { WlltAnt wlltAnt = new WlltAnt(); switch (type) { case "香蕉1": wlltAnt.setStatus(1); wlltAnt.setTodo("去学习了"); wlltAnt.setNum(1); wlltAnt.setFlavor("糯糯的"); break; case "香蕉2": wlltAnt.setStatus(1); wlltAnt.setTodo("去学习了"); wlltAnt.setNum(2); wlltAnt.setFlavor("糯糯的"); break; case "香蕉3": wlltAnt.setStatus(1); wlltAnt.setTodo("去学习了"); wlltAnt.setNum(3); wlltAnt.setFlavor("糯糯的"); break; case "木瓜学习": wlltAnt.setStatus(2); wlltAnt.setTodo("去学习了"); break; case "木瓜按摩": wlltAnt.setStatus(2); wlltAnt.setTodo("去按摩了"); break; case "草莓酸酸": wlltAnt.setStatus(3); wlltAnt.setFlavor("酸酸的"); break; case "草莓甜甜": wlltAnt.setStatus(3); wlltAnt.setFlavor("甜甜的"); break; //根据不同的口味,数量,想去做的事去建立不同的对象 } return wlltAnt; }

调用工厂

//根据不同的对象去选择就好 WlltAnt wlltAnt = AntFactory.createAnt("草莓酸酸"); WlltAnt wlltAnt2 = AntFactory.createAnt("香蕉2"); WlltAnt wlltAnt3 = AntFactory.createAnt("木瓜按摩"); //more ... eat(wlltAnt); eat(wlltAnt2); eat(wlltAnt3); 蝼蚁吃了个酸酸的草莓 蝼蚁吃了2根香蕉去 蝼蚁吃了个木瓜去按摩了

总结

(皮)简单工厂模式可以给我们带来项目经历经常抽风的问题。 从上到下的优化来看,⼯⼚⽅法模式并不复杂,甚⾄这样的开发结构在你有所理解后,会发现更加简单了。 那么这样的开发的好处知道后,也可以总结出来它的优点。

避免创建者与具体的产品逻辑耦合 、 满足单⼀职责, 每一个业务逻辑实现都在所属自己的类中完成 、 满足开闭原则

以上案例都是从简开发,实际开发中我们还可以去优化,根下次学习的抽象工厂相关

总目录

最新回复(0)