设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。
使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。
属于创建型模式,它提供了一种创建对象的最佳方式。在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。
步骤1:创建一个接口
public interface Shape { void draw(); }
步骤2:创建实现接口的实体类
1 public class Rectangle implements Shape { 2 3 @Override 4 public void draw() { 5 System.out.println("Inside Rectangle::draw() method."); 6 } 7 } 8 9 10 11 public class Square implements Shape { 12 13 @Override 14 public void draw() { 15 System.out.println("Inside Square::draw() method."); 16 } 17 } 18 19 20 public class Circle implements Shape { 21 22 @Override 23 public void draw() { 24 System.out.println("Inside Circle::draw() method."); 25 } 26 }
步骤3:创建一个工厂,生成基于给定信息的实体类的对象
1 public class ShapeFactory { 2 3 //使用 getShape 方法获取形状类型的对象 4 public Shape getShape(String shapeType){ 5 if(shapeType == null){ 6 return null; 7 } 8 if(shapeType.equalsIgnoreCase("CIRCLE")){ 9 return new Circle(); 10 } else if(shapeType.equalsIgnoreCase("RECTANGLE")){ 11 return new Rectangle(); 12 } else if(shapeType.equalsIgnoreCase("SQUARE")){ 13 return new Square(); 14 } 15 return null; 16 } 17 }
步骤4:使用该工厂,通过传递类型信息来获取实体类的对象。
1 public class FactoryPatternDemo { 2 3 public static void main(String[] args) { 4 ShapeFactory shapeFactory = new ShapeFactory(); 5 6 //获取 Circle 的对象,并调用它的 draw 方法 7 Shape shape1 = shapeFactory.getShape("CIRCLE"); 8 9 //调用 Circle 的 draw 方法 10 shape1.draw(); 11 12 //获取 Rectangle 的对象,并调用它的 draw 方法 13 Shape shape2 = shapeFactory.getShape("RECTANGLE"); 14 15 //调用 Rectangle 的 draw 方法 16 shape2.draw(); 17 18 //获取 Square 的对象,并调用它的 draw 方法 19 Shape shape3 = shapeFactory.getShape("SQUARE"); 20 21 //调用 Square 的 draw 方法 22 shape3.draw(); 23 } 24 }