「这是我参与2022首次更文挑战的第13天,活动详情查看:2022首次更文挑战」。
一、工厂模式是什么
工厂模式就是具体工厂创建具体的产品,用户只需要知道工厂的名称,就可以获得具体的产品。即有一个抽象产品工厂生产抽象的猫。那么,对应的每一种具体的产品都由具体的一个工厂生产,比如有一种红颜色的猫,就需要由生产红猫的具体工厂生产。我们只需要知道生产红猫的工厂的名字,既可以获得红颜色的猫。
二、工厂模式的实现
public interface CatFactory {
CatProduct getCat();
}
生产猫的抽象产品工厂
public interface CatProduct {
void sayMyName();
}
抽象产品猫
public class RedCatProduct implements CatProduct{
@Override
public void sayMyName() {
System.out.println("I am a red cat!");
}
}
具体产品红猫
public class RedCatFactory implements CatFactory{
@Override
public CatProduct getCat() {
return new RedCatProduct();
}
}
具体工厂红猫工厂
public class BlankCatProduct implements CatProduct{
@Override
public void sayMyName() {
System.out.println("I am a blank cat!");
}
}
具体产品黑猫
public class BlankCatFactory implements CatFactory{
@Override
public CatProduct getCat() {
return new BlankCatProduct();
}
}
具体工厂黑猫工厂
public static void main(String[] args) {
CatFactory redCatFactory = new RedCatFactory();
CatProduct catA = redCatFactory.getCat();
CatFactory blankFactory = new BlankCatFactory();
CatProduct catB = blankFactory.getCat();
catA.sayMyName();
catB.sayMyName();
}
工厂模式生产产品,需要有抽象的工厂和抽象的产品,然后具体的产品和工厂具体实现,不同的产品不同的工厂。最后使用时直接通过不同的工厂获得不同的产品。
三、总结
优点:可以隐藏产品创建的具体过程,只需要知道产品对应的工厂的名称,就可以获得对应的产品。此外,新建产品只需要新增工厂类和产品类(比如多了黄猫这种产品,就需要新增一个黄猫工厂)。
缺点:随着产品增多,类的个数会不停增多,增加了系统的复杂性。还有就是一个工厂只能创建一种产品。
总结起来工厂模式适用于用户只需要获得产品,不需要知道具体的实现。此外,工厂模式符合开闭原则。
简单工厂模式和工厂模式还有抽象工厂模式的区别:
-
简单工厂模式即一个工厂可以生产多个同类的产品,比如简单工厂模式的狗狗工厂可以生产各种大小的狗狗。如果新增产品,就需要修改简单工厂的代码,不符合开闭原则。
-
工厂模式每个工厂生产具体的产品,符合开闭原则。与简单工厂的不同在于无需向简单工厂那样修改工厂的代码。
-
抽象工厂是工厂模式的一种升级版本,解决了工厂模式一个工厂无法创建多类产品的问题,同样符合开闭原则。