解释:工厂模式的目的在于当实例化某个对象时,用户不需要知道它的内部细节,只需要知道创建对象的入口(接口)
1. 结构和原理
简单工厂模式的原理是把某些类的实例化工作交由一个独立的类来完成,这个独立的类就称为简单工厂类,这种设计模式就是简单的工厂模式。
在简单工厂模式中,让简单工厂类来决定使用哪一个具体的子类来实例化当前的对象,这样做的好处客户类(获取对象的类)和子类(需要实例化的类)之间实现解耦合,客户类不需要知道子类中的细节以及选择哪一个类来实例化;当子类发生改变时,客户类也不需要进行任何的修改,所有的繁杂工作都将由工厂类负责。
2. 实现简单的工厂模式
public interface Product{ public String doing(); } public class Apple implements Product{ @Override public String doing(){ return "iPhone X"; } } public class Huawei implements Product{ @Override public String doing(){ return "P20 Pro" } } public class OPPO implements Product{ @Override public String doing(){ return "R17 Pro" } } public class SimpleFactory{ public static final int APPLE = 1; public static final int HUAWEI = 2; public static final int OPPO = 3; public Product createProduct(int type){ if(type == APPLE){ return new Apple(); }else if(type = HUAWEI){ return new Huawei(); }else{ return new OPPO(); } } } public class Customer{ public static void main(String[] args){ SimpleFactory factory = new SimpleFactory(); Product phone1 = factory.createdProduct(SimpleFactory.APPLE); Product phone2 = factory.createdProduct(SimpleFactory.HUAWEI); Product phone3 = factory.createdProduct(SimpleFactory.OPPO); System.out.println(phone1.doing()); System.out.println(phone2.doing()); System.out.println(phone3.doing()); } }
控制台输出:
IPhone X P20 Pro R17 Pro
3. 总结
优点
在简单工厂模式中,工厂类(SimpleFactory)是整个模式的关键,它包含了必要的逻辑判断,通过获取外界给定的信息来决定应该创建哪一个具体类的对象。通过使用工厂模式,客户端类可以创建具体的产品子类中解放出来,客户端类只需要知道如何消费对象就可以了,而不必要去知道究竟是哪一个类实例化了以及该类的内部细节是什么。
缺点
简单工厂模式也存在它的缺陷,由于工程类(SimpleFactory)集中了所有类实例化对象的逻辑,违反了 高内聚 的责任分配原则,将全部创建逻辑集中到一个类中;它所能创建的类只能提前设置好,如果后续有新的子类加入,则需要重新修改工厂类。
适用场景
- 工厂类负责实例化的对象较少的情况下
- 客户端类只传入工厂类的参数,而不需要干预产品子类实例化过程的情况下
- 由于简单工厂模式破坏了高内聚责任分配原则,建议在小范围内使用