在Java中的23种设计模式里,咱们已经讲过单例设计模式,那么今天在这里咱们讲一讲工厂模式。
那什么是工厂模式呢?工厂模式又是用来解决什么问题的?工厂模式的几种写法,接下来会一一进行讲解。
工厂模式的定义
工厂模式将目的将创建对象的具体过程屏蔽隔离起来,从而达到更高的灵活性。这样的话可以降低各个代码之间的依赖性,从而达到一个松耦合的特点。而在公司中由于工作的分工,松耦合是一个非常重要的指标。
工厂模式的应用场景
工厂模式,顾名思义,就是用来生产一些东西的。那在Java中,面向对象编程里,最重要的就是对象的概念了,所以工厂模式就是用于生产对象,在这里会构造不同类的对象。
可以试想这样的场景:在公司代码中,底层提供的一个Cat的类,上层直接使用new+构造方法的方式来进行了对象的构造生成,但是这时候突然发现Cat类写的并不对,需要改成Dog类,这样的话就会让所有涉及到Cat构造方法的代码全部修改,很显然这样并不合理,会浪费大量的人力物力,所以工厂模式就出现了。
工厂模式的写法
简单工厂
简单工厂模式就是利用if判断,来进行不同构造方法的调用,代码如下:
public Animal produce(String animal){
if(animal == "Dog"){
return new Dog();
}else if(animal == "Cat"){
return new Cat();
}else {
return new Snake();
}
}
但是这样的话会有一个缺陷:如果我的代码打错了,把Dog打成了dag,这样的话得到的是Snake的对象类型,而不是我想要的Dog类型,这样的话会容易出现类型的错误。所以出现了第二种工厂模式
方法工厂
在上一个方法中出现了类型的错误,那为了解决这个问题,我们就提出了方法工厂,我们可以把每一个对象的创建拆分成一个方法,这样的话就能解决因为打错名字而导致的类型错误
public Cat produceCat(){
return new Cat();
}
public Dog produceDog(){
return new Dog();
}
public Snake produceSnake(){
return new Snake();
}
利用不同的方法名来区分构造方法的调用,这样的话就能避免字符串的拼写错误导致的类型错误,但是思考一下,这样的话每次调用方法的前提是需要创建这个工厂类的对象,当大量的对象被创造出来,会造成一个内存的占用问题,这个问题其实很好解决,利用静态方法可以使用类名调用的特点就可以完美解决问题。
静态工厂
在静态工厂中,大部分东西都是和方法工厂一致,唯一的区别就是静态工厂中的方法全部为静态方法,这样的话就能让方法的调用更加简单,避免了大量工厂类型对象的创建。
public static Cat produceCat1(){
return new Cat();
}
public static Dog produceDog1(){
return new Dog();
}
public static Snake produceSnake1(){
return new Snake();
}

被折叠的 条评论
为什么被折叠?



