设计模式-工厂模式(简单工厂)

 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 的增加是必然的,那么能否不修改工厂类就完成所需功能?下面论述的工厂模式。

  

 

posted @ 2021-01-04 18:41  曹丽是我女朋友。  阅读(93)  评论(0编辑  收藏  举报