什么是工厂模式
定义用于创建对象的接口,让子类决定创建哪个类的实例。工厂方法允许类的实例化延迟到子类。
工厂模式的应用场景
在面向对象编程中创建对象实例,我们通常会使用 new 关键词来实例化对象,很多情况下我们可以直接 new 一个对象实例。但是在一些情况下,如果需要完成一系列步骤才能创建一个对象实例,这样就容易造成使用者使用的不便以及代码的繁杂混乱。从使用者角度来看,若每次创建对象都要写重复好长的一段创建实例代码,是非常不友好的,希望创建方式越简单越好。这时候就可以使用工厂模式来替代 new 对象实例的方法,把创建过程交给工厂类去处理,需要的实例对象直接从工厂里获取。
联系实际,我们想要一件衣服,我们不需要自己生产衣服,也不需要知道衣服是怎么做,只需要给钱向店家买就好了,交钱给衣服就这么简单,简单是我们的,麻烦是店家的。
工厂方法模式的主要优点有:
而工厂方法模式的缺点是:每增加一个产品就要增加一个具体产品类和一个对应的具体工厂类,增加了系统的复杂度。
工厂模式的实现
1、简单工厂模式
简单工厂模式通过专门定义一个工厂类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。将类的创建过程全都交给工厂处理,用户只需要告诉工厂需要什么实例即可。具体代码如下:
interface Clothes {
void desc();
}
class TShirt implements Clothes {
@Override
public void desc() {
System.out.println("I'm TShirt");
}
}
class PoloShirt implements Clothes {
@Override
public void desc() {
System.out.println("I'm PoloShirt");
}
}
public class SimpleFactory {
public Clothes productClothes(String clothesName) {
Clothes clothes = null;
switch (clothesName) {
case "TShirt":
clothes = new TShirt();
break;
case "PoloShirt":
clothes = new PoloShirt();
break;
}
return clothes;
}
}
简单工厂模式的优点:
将创建实例的工作交给工厂处理,使用者不需关心对象实例如何创建的,只管使用即可,实现了代码解耦作用,更易于维护。
简单工厂模式的缺点:
2、工厂方法模式
为了解决简单工厂模式存在的缺点,就产生了工厂方法模式。工厂方法模式是对简单工厂模式进一步的解耦,每一个产品对应一个产品工厂类和产品类,把原本因为业务代码而庞大的工厂类,拆分成了一个个的工厂类,这样代码就不会都耦合在同一个类里了,符合开放封闭原则。我们将上面的代码调整如下:
interface Clothes {
void desc();
}
class TShirt implements Clothes {
@Override
public void desc() {
System.out.println("I'm TShirt");
}
}
class PoloShirt implements Clothes {
@Override
public void desc() {
System.out.println("I'm PoloShirt");
}
}
interface IFactory {
Clothes produce(String prudct);
}
class TShirtFactory implements IFactory {
@Override
public Clothes produce(String prudct) {
Clothes clothes = new TShirt();
return clothes;
}
}
class PoloShirtFactory implements IFactory {
@Override
public Clothes produce(String prudct) {
Clothes clothes = new PoloShirt();
return clothes;
}
}
以后若需要新增产品,只需要实现 IFactory 接口创建新的工厂类,使用特定的工厂生产特定的产品。
工厂方法模式解决了简单工厂模式会违背开放封闭原则的问题,又向用户屏蔽具体实现细节,保持了面向对象编程的优点;多个工厂工作,降低生产风险。
但工厂方法模式也有个很明显的缺点就是每增加一个产品类,就需要增加一个对应的工厂类,无形增加了额外的工作量。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有