工厂模式,首先看下Wikipedia的描述
Factory Pattern is "A factory is an object for creating other objects". Simple Factory Pattern is a Factory
class in its simplest form (In comparison to Factory Method Pattern or Abstract Factory Pattern). In another way, we can say: In simple factory pattern, we have a factory class which has a method that returns different types of object based on given input.
简单翻译一下,工厂模式是“工厂是一个用于生成其他对象的对象”,简单工厂模式是一个最简单的工厂类(Factory)(与工厂方法模式,和抽象工厂模式相比)。换句话说在简单工厂模式中,我们有一个工厂类,里面有一个方法用于根据不同的输入返回不同类型的对象。直观的理解就是这样Factory.getObject(ObjectType),根据参数类型获取对应的对象。
这里我们主要讨论的问题是为什么需要使用简单工厂模式,而不是直接new一个实例就完了。这里有以下几个方面的考虑。
1、方便客户端调用,调用端可能不需要参与创建的过程。简洁明了,同时也起到了保护内部创建过程的作用。
2、集中管理这些需要创建的对象,这些对象可能有严格的生命周期控制,这样就可以做到集中管理这些生成的对象。
3、从可维护性的角度来说,如果调用者过多的介入了生成过程,那么当需要修改的时候,就会出现较多的地方需要维护,这样项目的可维护性就变差了,使用简单工厂模式就使得项目更加容易维护。如果具体的实现类变更了,外界不需要感知内部的变化。只需要内部变更即可。
public class Test { public static void main(String[] args){ IShape shape = ShapeFactory.getShape(EnumShape.Circle); shape.shape(); } }
public class ShapeFactory { public static IShape getShape(EnumShape enumShape){ IShape shape = null; switch (enumShape){ case Circle: shape = new CircleShape(); break; case Trangle: shape = new TrangleShape(); break; } return shape; } }
/** * 图形接口 */ public interface IShape { void shape(); }
public class CircleShape implements IShape{ @Override public void shape() { System.out.println("it is CircleShape"); } }
public class TrangleShape implements IShape{ @Override public void shape() { System.out.println(" It is trangle"); } }
public enum EnumShape { Circle,Trangle }
