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

这个模式比较简单,平常也基本不用,见得最多的也就是读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 @   undifinedException  阅读(255)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core GC计划阶段(plan_phase)底层原理浅谈
· .NET开发智能桌面机器人:用.NET IoT库编写驱动控制两个屏幕
· 用纯.NET开发并制作一个智能桌面机器人:从.NET IoT入门开始
· 一个超经典 WinForm,WPF 卡死问题的终极反思
· ASP.NET Core - 日志记录系统(二)
阅读排行:
· 支付宝事故这事儿,凭什么又是程序员背锅?有没有可能是这样的...
· https证书一键自动续期,帮你解放90天限制
· 在线客服系统 QPS 突破 240/秒,连接数突破 4000,日请求数接近1000万次,.NET 多
· 推荐几个不错的 Linux 服务器管理工具
· C# 开发工具Visual Studio 介绍
点击右上角即可分享
微信分享提示