美文网首页设计模式学习小结
设计模式小结-简单工厂模式

设计模式小结-简单工厂模式

作者: r09er | 来源:发表于2017-09-16 16:10 被阅读11次

    简单工厂模式不属于Gof的23种设计模式之一,但是普遍适用于编程中,所以都会把简单工厂模式归为设计模式之一.并且作为学习工厂模式的入门模式.

    示例场景:

    有一个图形绘制功能,需要绘制或者擦除各种图形,例如圆形、三角形、矩形等,而且可以较为方便地对图形库进行扩展,以便能够在将来增加一些新类型的图表。

    UML类图

    UML类图

    代码示例:

    图形接口

    public interface Shape {
        void draw();
        void erase();
    }
    

    三角形

    public class Triangle implements Shape {
    
        public Triangle() {
            System.out.println("创建绘制三角形工具");
        }
        @Override
        public void draw() {
            System.out.println("绘制三角形");
        }
    
        @Override
        public void erase() {
            System.out.println("擦除三角形");
        }
    }
    

    图形工厂

    public class ShapeFactory {
    
        public static Shape getShape(String type)  {
            Shape shape =null;
            if(type.equalsIgnoreCase("round")){
                shape = new Round();
            }else if(type.equalsIgnoreCase("rectangle")){
                shape = new Rectangle();
            }else if(type.equalsIgnoreCase("triangle")){
                shape = new Triangle();
            }
            return shape;
        }
    }
    

    调用

    代码中使用了读取XML的配置,这样就能够在不修改代码的基础上改变绘制的图形

     public static void main(String[] args){
            Shape shape ;
            shape = ShapeFactory.getShape(SimpleFactoryXmlUtil.getShapeType());
            shape.draw();
            shape.erase();
        }
    

    小结:

    简单工厂作为设计模式是违反了面向对象设计原则中的开闭原则,需要对系统进行拓展的时候就需要修改源代码,但是这种现象在编程中会普遍存在,所以要考虑使用的场景.

    简单工厂的优点:

    • 1.简单工厂模式实现了对象创建和使用的分离
    • 2.调用者无须知道所创建的具体产品类的类名,只需要知道具体产品类所对应的参数
    • 3.通过引入配置文件,可以在不修改任何客户端代码的情况下更换和增加新的具体产品类,在一定程度上提高了系统的灵活性。

    缺点:

    • 1.由于工厂类集中了所有产品的创建逻辑,职责过重,一旦不能正常工作,整个系统都要受到影响
    • 2.扩展困难,一旦添加新产品就不得不修改工厂逻辑,在产品类型较多时,有可能造成工厂逻辑过于复杂,不利于系统的扩展和维护

    适用场景:

    示例中用创建图形作为简单工厂的示例并不合适,因为可能会出现多种图形,并且对以后的拓展并不友好

    • 1.工厂类负责创建的对象比较少,由于创建的对象较少,不会造成工厂方法中的业务逻辑太过复杂
    • 2.调用者只想知道调用参数,不关心对象创建

    相关文章

      网友评论

        本文标题:设计模式小结-简单工厂模式

        本文链接:https://www.haomeiwen.com/subject/fqbysxtx.html