zoukankan      html  css  js  c++  java
  • 设计模式原理及应用·简单工厂模式

    这个模式比较简单,平常也基本不用,见得最多的也就是读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实现
     
    相关模式
        创建型模式:建造者模式、抽象工厂模式、工厂方法模式、原型模式、工厂模式
        工厂模式相关:抽象工厂模式、工厂方法模式

      

      

  • 相关阅读:
    day 66 ORM django 简介
    day 65 HTTP协议 Web框架的原理 服务器程序和应用程序
    jQuery的事件绑定和解绑 事件委托 轮播实现 jQuery的ajax jQuery补充
    background 超链接导航栏案例 定位
    继承性和层叠性 权重 盒模型 padding(内边距) border(边框) margin 标准文档流 块级元素和行内元素
    属性选择器 伪类选择器 伪元素选择器 浮动
    css的导入方式 基础选择器 高级选择器
    03-body标签中相关标签
    Java使用内存映射实现大文件的上传
    正则表达式
  • 原文地址:https://www.cnblogs.com/dhcao/p/11151858.html
Copyright © 2011-2022 走看看