Java 工厂模式怎么写

你有没有过这样的经历:家里的灯坏了,要换灯泡,你不用关心灯泡是怎么生产出来的,只需要买个匹配的换上就行;奶茶店的店员,也不用知道珍珠、奶茶液是怎么做的,只需要把原料按比例混在一起,就能做出一杯奶茶。这种“不用管具体生产,只负责调用成品”的思路,放到编程里,就是工厂模式。

什么是工厂模式?

工厂模式说白了,就是专门用一个“工厂类”来创建对象,你要什么对象,就告诉工厂一声,工厂给你一个现成的,你不用自己去new一个。还是举个例子:你开了个奶茶店,有珍珠奶茶、果茶两种产品。以前你做单的时候,要先自己煮珍珠、倒奶茶液,或者自己切水果、泡绿茶,很麻烦;现在你搞个“奶茶工厂”,顾客下单“珍珠奶茶”,工厂就给你做好一杯,下单“果茶”,工厂就给另一杯,你只需要把杯子递出去就行。

Java 工厂模式怎么写

为啥要用工厂模式?

假设你现在做奶茶,顾客要的是“热珍珠奶茶”,你得自己煮热珍珠、加热奶茶;后来又要“冰果茶”,你得切冰水果、泡凉绿茶。要是哪天加了新品,比如“芋泥啵啵奶绿”,你还得重新写做它的代码。要是用工厂模式,你只需要让工厂多一个“做芋泥啵啵奶绿”的方法就行,不用改原来的珍珠奶茶、果茶代码。

再想想,要是某天珍珠奶茶的配方改了,比如原来用木薯珍珠,现在用黑糖珍珠,你不用去店里每个做单的地方改代码,只需要在工厂里改“做珍珠奶茶”的方法就行。这样一来,代码不会乱,改起来也省事儿,不容易出错。

怎么写一个简单的工厂模式?

我们用Java代码来写,全程不用复杂术语,跟着步骤来就好。

第一步,先定义一个“产品接口”,所有奶茶都要有的共性,比如“做饮品”。就像不管是珍珠奶茶还是果茶,都得能做出来。代码大概是:

interface MilkTea {

void make();

}

第二步,写具体的“产品类”,比如珍珠奶茶、果茶,分别实现这个接口。比如珍珠奶茶类:

class PearlMilkTea implements MilkTea {

public void make() {

System.out.println("煮黑糖珍珠,倒热奶茶,搅拌均匀");

}

}

果茶类:

class FruitTea implements MilkTea {

public void make() {

System.out.println("切新鲜芒果,泡绿茶,加冰块");

}

}

第三步,写“工厂类”,负责根据你要的类型,返回对应的产品。就像奶茶工厂,你说要什么,它给你做什么:

class MilkTeaFactory {

// 这里的type就是你要的奶茶类型,比如"pearl"或"fruit"

public MilkTea createMilkTea(String type) {

if ("pearl".equals(type)) {

return new PearlMilkTea();

} else if ("fruit".equals(type)) {

return new FruitTea();

}

return null; // 要是输入的类型不对,就返回空

}

}

第四步,测试一下,看看能不能用。就像你去奶茶店下单:

public class Test {

public static void main(String[] args) {

// 先造一个奶茶工厂

MilkTeaFactory factory = new MilkTeaFactory();

// 下单珍珠奶茶,工厂给你做

MilkTea myDrink = factory.createMilkTea("pearl");

myDrink.make(); // 输出:煮黑糖珍珠,倒热奶茶,搅拌均匀

// 再下单果茶

MilkTea yourDrink = factory.createMilkTea("fruit");

yourDrink.make(); // 输出:切新鲜芒果,泡绿茶,加冰块

}

}

这样就写完了一个最简单的工厂模式,是不是很简单?

最后说句实在的

工厂模式不是什么高大上的东西,就是帮你省事儿、少出错的工具。就像你不用自己造灯泡,买现成的就行;写代码的时候,不用每次都从头写创建对象的代码,用工厂统一管理,以后改起来也方便。要是你现在写的代码里,经常重复写new对象的代码,不妨试试用工厂模式改一改,很快就能感受到它的好处。

上一篇 PHP foreach 怎么用