zoukankan      html  css  js  c++  java
  • 设计模式-工厂模式(简单工厂)

     1. 问题的提出

      现实生活中,工厂用来生产产品,有两个关键的角色:产品及工厂。计算机的工厂模式与实际的工厂的特征是相近的,因此工厂模式的关键点就是如何描述好这两个角色之间的关系,分为四种情况。

      1) 单一产品系。工厂生产一种类型的产品。小汽车工厂,生产高,中,低3种类型小汽车。

       2) 多产品系,特征相同。工厂生产多种类型的产品。表明是小汽车、公共汽车工厂,均有高、中、低3种类型汽车。

      3) 多产品系,部分特征相同。小汽车、公共汽车工厂,均有高档、中档两种类型汽车。除此之外,小汽车还有抵挡类型。

       4)多产品系,无特征相同。小汽车、公共汽车工厂,小汽车有高档、中档两种类型汽车。公共汽车有抵挡类型。

     

         工厂模式一般分为简单工厂、工厂、抽象工厂3种情况,属于创建型设计模式。上面的工厂生产汽车的几种情况可以分别映射到这几种工厂模式中。

    2. 简单工厂

      UML图:

    public interface ICar {
    // 由于工厂模式仅关系对象的创建,为说明方便,无需定义方法
    }

    public class TopCar implements ICar {}

    public class MidCar implements ICar {}

    public class LowCar implements ICar {}

    public class CarSimpleFactory {
    public static final String TOPTYPE = "toptype";
    public static final String MIDTYPE = "midtype";
    public static final String LOWTYPE = "lowtype";

    public static ICar create(String mark) {
    ICar car = null;
    if (mark.equals(TOPTYPE)) {
    car = new TopCar();
    }
    if (mark.equals(MIDTYPE)) {
    car = new MidCar();
    }
    if (mark.equals(LOWTYPE)) {
    car = new LowCar();
    }
    return car;
    }
    }

    public class EasyCarTest {
    public static void main(String[] args) {
    // 从工厂中穿件对象
    ICar car = CarSimpleFactory.create("toptype");
    }
    }

    代码分析:

     1. 简单工厂功能类编制步骤

    • 定制抽象产品接口,如ICar。
    • 定制具体产品子类,如类TopCar、MidCar、LowCar。
    • 定制工厂类,如CarSimpleFactory。简单工厂的特点:它是一个具体的类,非接口或抽象类,其中有一个重要的create() 方法,利用if...else或switch开关创建所需产品,并返回。

     2. 工厂类静态create( )方法的理解

      使用工厂的时候,通常不用创建简单工厂类的类事例,没有创建事例的必要。因此可以把简单工厂类实现成一个工具类,直接使用静态方法就可以了。也就是说,简单工厂的方法通常是静态的,所以也被称为静态工厂。如果要防止客户端无谓的创造简单工厂事例,还可以把简单工厂的构造方法私有化。

     语义分析 

      生活中的语义分析是一个优秀的方法,可以方便构建应用程序的框架。例如甲和乙关于工厂和工作的对话。

      如果现在又新增一个超高档类型的汽车,在简单工厂模式下,需要做的工作有:

    1. 增ICar的子类SuperCar;
    2. 修改工厂类SimpleCarFactory 中的create( )方法,增加 SuperCar对象的判断选择分支。类SuperCar 的增加是必然的,那么能否不修改工厂类就完成所需功能?下面论述的工厂模式。

      

  • 相关阅读:
    asp.net mvc 国际化(2) 解决问题
    asp.net mvc 国际化(1) 国际化的基础
    Silverlight自学笔记布局基础
    ASP.NET MVC form验证
    Expression Tree 入门
    JQuery 思维导图
    HashMap的Put方法(二)
    HashMap的构造函数(三)
    HashMap的数据结构(一)
    HashMap之扩容resize(四)
  • 原文地址:https://www.cnblogs.com/yhc-love-cl/p/14231523.html
Copyright © 2011-2022 走看看