​​​为什么要使用工厂模式

初学者一般创建实例对象通常使用new关键字,但遇到初始化工作如果是很长一段代码,那岂不是要做很多工作,将很多工作装入一个方法中,相当于将很多鸡蛋放入一个篮子里,危险。而且也不符合java面向对象的原则。

工厂模式防止用来实例化一个类的数据和代码在多个类中到处都是,可以将有关创建的代码搬到一个工厂类中,可以简化New的过程,让程序更健康。

注意:复杂对象适合使用工厂模式,而简单对象,特别是只需要通过 new 就可以完成创建的对象,无需使用工厂模式。如果使用工厂模式,就需要引入一个工厂类,会增加系统的复杂度。

什么是工厂模式

 工厂模式是java中最常用的设计模式之一,属于创建型模式,提供了创建对象的最佳方案。(比如要换新手机了,可以直接在    专卖店(工厂)提货,而不用去管这部手机是怎么做出来的)

怎么使用工厂模式

 首先定义一个创建对象的接口,然后让它的子类决定实例化哪一个工厂类。工厂模式使其创建过程延迟到子类进行。

 实现过程:

                             设计模式---工厂模式

第一步:创建shape接口

    shape.java

              public interface Shape{

                void drow();

                }

第二步:创建实现接口的实体类

Rectangle.java

public class Rectangle implements Shape{

   //重写接口的方法

   @override

     public void draw(){

      System.out.draw("你好,Rectangle!")

      }

}

Square.java

 public class Square implements Shape {

    @Override

     public void draw() {

          System.out.println("你好,Square");

     }

}

Circle.java

public class Circle implements Shape {

     @Override

      public void draw() {

      System.out.println("你好,Circle");

      }

}

第三步:创建工厂类

ShapeFactory.java

 public class ShapeFactory{

     //获得上面三个实体类的对象

     public Shape getShape(String shapeType){

          if(shapeType==null){

            return null;

            }

         //equalsIgnoreCase忽略字符串的大小写

         if(shapeType.equalsIgnoreCase("CIRCLE")){

             return new Circle();

         }else if((shapeType.equalsIgnoreCase("RECTANGLE")){

             return new Rectangle();

        }else if(shapeType.equalsIgnoreCase("SQUARE")){

           return new Square();

      }

       return null;

      }

}

 

第四步:使用工厂,通过传递类型信息来获取实体类的对象

FactoryPatternDemo.java 

public class FactoryPatternDemo{

   public static void main(String[]args){

     ShapeFactory shapeFactory=new ShapeFactory();

     Shape s1=shapeFactory.getShape("SQUARE");

      s1.draw();

     Shape s2=shapeFactory.getShape("CIRCLE");

     s2.draw();

     Shape s3=shapeFactory.getShape("RECTANGLE");

     s3.draw();

    }

}

ok,输出结果就好。(实例应用的例子来自菜鸟教程http://www.runoob.com/design-pattern/factory-pattern.html

 

 

 

 

 

 

 

 

 

 

 

 

 

 

相关文章: