简单工厂模式定义:
简单工厂模式(Simple Factory Pattern):定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。因为在简单工厂模式中用于创建实例的方法是静态(static)方法,因此简单工厂模式又被称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。
简单工厂的优点:
- 实现对象的创建和使用分离,在工厂类的逻辑中实现对象的创建。
- 可以通过引入读取配置文件的方式,在不修改代码的前提下创建具体产品类,提高系统灵活性。
简单工厂的缺点:
- 工厂类中集中了产品的创建逻辑,职责过重。
- 简单工厂增加系统中类的个数,增加系统理解难度和复杂度。
- 在增加新产品时必须修改工厂类中创建逻辑,当产品类型较多时,不利于工厂类的维护。
- 简单工厂类使用了静态方法,无法形成继承的等级关系。
简单工厂的使用场景:
- 工厂中的创建逻辑较少,不会造成工厂方法中的逻辑复杂。
- 客户端只传入工厂参数,对具体类如何创建不关心。
总结:
简单工厂的工厂类提供具体产品的创建,把对象的创建和对象的使用分开。
练习:
//抽象产品类 public interface Shape{ public void draw();//画图 public void erase();//擦除 } //创建圆形 public class Circle implements shape{ public void draw(){ System.out.println("画圆");}//画图 public void erase(){ System.out.println("擦除圆");}//擦除 } //创建方形 public class Square implements shape{ public void draw(){ System.out.println("画矩形");}//画图 public void erase(){ System.out.println("擦除矩形");}//擦除 } //创建三角形 public class Triangle implements shape{ public void draw(){ System.out.println("画三角形");}//画图 public void erase(){ System.out.println("擦除三角形");}//擦除 } //创建工厂方法 public class ShapeFactory{ public static Shape getShape(String type) throws Exception{ if("cricle".equals(type)){ Shape = new Circle(); }else if("Square".equals(type)){ Shape = new Square(); }else if("Triangle".equals(type)){ Shape = new Triangle(); }else{ throw new Exception("UnSupportedShapeException"); } return Shape; } } //测试方法 Shape shape; shape = ShapeFactory.getShape("Circle");//也可以引入静态文件进行读取 shape.draw(); shape.erase();
学习参考