zoukankan      html  css  js  c++  java
  • 工厂模式

    定义:专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类(抽象类)或接口。简单工厂模式又称为静态工厂方法模式,属于类的创建型模式,通常根据一个条件(参数)来返回不同的类的实例。
    它由三种角色组成(关系见下面的类图):
    1、工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑,负责通过不同条件创建不同产品。
    2、抽象产品角色:它一般是具体产品继承的父类或者实现的接口。在java中由接口或者抽象类来实现。
    3、具体产品角色:工厂类所创建的对象就是此角色的实例,是简单工厂模式的创建目标。


    结构图:

    优点:
    · 简单工厂模式能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。通过它,外界可以从直接创建具体产品对  象的尴尬局面中摆脱出来。 
    · 外界与具体类隔离开来,偶合性低。 
    · 明确区分了各自的职责和权力,有利于整个软件体系结构的优化。
    -在简单工厂模式中最核心的部分----工厂类不要根据传来的条件去动态创建产品类,利用反射机制去创建。把要实例化的类名放在应用程序配置文件中, 可以让文件更好维护。


    缺点:
    · 工厂类集中了所有实例的创建逻辑,容易违反GRASPR的高内聚的责任分配原则  
    · 虽然简单工厂模式能够适应一定的变化,但是它所能解决的问题是远远有限的。它所能创建的类只能是事先就考虑到的,如果需要添加新的类,则就需要改变工厂类了。
    -在添加新产品时,需要编写新的具体产品类(其实这不算一个缺点,因为这是不可避免的),要增加与之对应的具体工厂类。 

    应用:工厂类通过传入的参数确定实例化那种形状,形状的(具体产品)类继承自shape(抽象产品类)。

    1.创建接口或抽象类:public interface Shape { void draw();}
    2.创建实现接口的实体类,这些类最终会被工厂实例化:

    public class Rectangle: Shape 
    {
       public void draw() 
      {      
        System.out.println("Inside Rectangle::draw() method.");
      }
    }
    public class Square: Shape { public void draw()   {     System.out.println("Inside Square::draw() method.");   }
    }

    3.创建工厂类:

    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();
          }
          return null;
       }
    }

    4.通过传递类型信息创建并获取实例:
    Shape shape1 = shapeFactory.getShape("CIRCLE");

    一直想把之前工作、学习时记录的文档整理到博客上,一方面温故而知新,一方面和大家一起学习 -程序小白
  • 相关阅读:
    【洛谷P4557】【JSOI2018】—战争(Minkowski Sum)
    【洛谷P4557】【JSOI2018】—战争(Minkowski Sum)
    【BZOJ3879】—SvT(后缀自动机+虚树/后缀自动机+单调栈)
    【BZOJ3879】—SvT(后缀自动机+虚树/后缀自动机+单调栈)
    多测师讲解pyhon__hashlib_高级讲师肖sir
    多测师讲解python函数 _open_高级讲师肖sir
    多测师讲解python函数 _zip_高级讲师肖sir
    多测师讲解内置函数 _format_高级讲师肖sir
    多测师讲解python _函数return_高级讲师肖sir
    多测师讲解python _函数中变量_高级讲师肖sir
  • 原文地址:https://www.cnblogs.com/wang-jin-fu/p/8313149.html
Copyright © 2011-2022 走看看