设计模式原理及应用·简单工厂模式

这个模式比较简单,平常也基本不用,见得最多的也就是读spring框架源码时候。
写这个总是提不起精神,写得不好,去看这个吧:
 
模式名和分类
  • 模式名:xxxFactory
  • 分类:创建型模式
 
意图
    将对象与它的创建,交给别人去做
 
别名
  无
 
动机
    将对象的创建与业务剥离,根据需要创建合适的对象,增加可扩展性!
 
适用性
  • 运用在框架中
  • 封闭的模块,想自己掌握对象的生成
  • 权限统合,将一类对象的创建权力收归工厂,参考Spring
  • 统一对象的创建方法,如果你在很多地方写了new,万一有一天需要加个new的参数呢?一个一个的去改?所以将创建对象给封装起来
 
结构

 


 

参与者
  • 有一个公共的父类或者接口,用来抽象类型。--Shape
  • 具体的、明确的对象,在父类的抽象之下。--Circle、Square、Rectangle
  • 工厂类,用于创建该一类实例(被抽象出来的一类)。--ShapeFactory
 
协作
  • ShapeFactory用于创建Shape这类实例,使用者调用ShapeFactory即可
    public class ShapeFactory {
        
       //使用 getShape 方法获取形状类型的对象
       public Shape getShape(String shapeType){
          if(shapeType == null){
             return null;
          }        
          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;
       }
    }

效果

  • 使用者要制定创建哪一个明确的实例
    public class FactoryPatternDemo {
       public static void main(String[] args) {
          ShapeFactory shapeFactory = new ShapeFactory();
          //获取 Circle 的对象,并调用它的 draw 方法
          Shape shape1 = shapeFactory.getShape("CIRCLE");
          //调用 Circle 的 draw 方法
          shape1.draw();
          //获取 Rectangle 的对象,并调用它的 draw 方法
          Shape shape2 = shapeFactory.getShape("RECTANGLE");
          //调用 Rectangle 的 draw 方法
          shape2.draw();
          //获取 Square 的对象,并调用它的 draw 方法
          Shape shape3 = shapeFactory.getShape("SQUARE");
          //调用 Square 的 draw 方法
          shape3.draw();
       }
    }

     

实现
    Spring的IOC实现,BeanFactory十分重要。
 
代码实例
    上已述
 
已知应用
    SpringIOC实现
 
相关模式
    创建型模式:建造者模式、抽象工厂模式、工厂方法模式、原型模式、工厂模式
    工厂模式相关:抽象工厂模式、工厂方法模式

  

  

posted @ 2019-07-08 16:08  undifinedException  阅读(255)  评论(0编辑  收藏  举报