Fork me on GitHub

设计模式之简单工厂模式

设计模式总共有23种,分三类:创建型,结构型,行为型

创建型(5种): 单例,简单工厂,工厂,抽象工厂,建造者,原始 这五种设计模式。这次我们来说说工厂设计模式

简单工厂设计模式

简单工厂设计模式也称静态工程设计模式,因为一般来说简单工厂的工厂类定义了一个静态方法

简单工厂设计模式解决了什么问题呢??

类实例化的操作使用对象的操作分开了,让使用者不用知道具体参数就可以实例化出所需要的“产品“类,从而避免了客户端代码中过多的实例化操作,实现了解耦。

简单工厂的UML类图

使用步骤

  1. 创建抽象产品类
  2. 创建具体产品类
  3. 创建工厂类 : 通过创建静态方法根据传入的参数不一样返回不同的产品类的实例。

举个例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
//抽象产品类
abstract class Product{
public abstract void show();
}
//具体产品类A
class ProductA extends Product{

@Override
public void show() {
System.out.println("生产出了产品A");
}
}
//具体产品类B
class ProductB extends Product{

@Override
public void show() {
System.out.println("生产出了产品C");
}
}
//具体产品类C
class ProductC extends Product{

@Override
public void show() {
System.out.println("生产出了产品C");
}
}
//简单工厂类
class Factory {
public static Product createProduct(String productname){
//工厂类里用switch语句控制生产哪种商品;
//使用者只需要调用工厂类的静态方法就可以实现产品类的实例化。
switch (productname){
case "A":
return new ProductA();

case "B":
return new ProductB();

case "C":
return new ProductC();

default:
return null;

}
}
}

简单工厂模式的使用方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
//工厂产品生产流程
public class SimpleFactoryPattern {
public static void main(String[] args){
Factory mFactory = new Factory();
//客户要产品A
try {
//调用工厂类的静态方法 & 传入不同参数从而创建产品实例
mFactory.createProduct("A").Show();
}catch (NullPointerException e){
System.out.println("没有这一类产品");
}
//客户要产品B
try {
mFactory.createProduct("B").Show();
}catch (NullPointerException e){
System.out.println("没有这一类产品");
}
//客户要产品C
try {
mFactory.createProduct("C").Show();
}catch (NullPointerException e){
System.out.println("没有这一类产品");
}
//客户要产品D
try {
mFactory.createProduct("D").Show();
}catch (NullPointerException e){
System.out.println("没有这一类产品");
}
}
}

优点

  1. 将创建实例的工作与使用实例的工作分开,使用者不必关心类对象如何创建,实现了解耦;
  2. 把初始化实例时的工作放到工厂里进行,使代码更容易维护。 更符合面向对象的原则 & 面向接口编程,而不是面向实现编程。

    缺点

  3. 工厂类集中了所有实例(产品)的创建逻辑,一旦这个工厂不能正常工作,整个系统都会受到影响;
  4. 违背“开放 - 关闭原则”,一旦添加新产品就不得不修改工厂类的逻辑,这样就会造成工厂逻辑过于复杂。
  5. 简单工厂模式由于使用了静态工厂方法,静态方法不能被继承和重写,会造成工厂角色无法形成基于继承的等级结构。
-------------本文结束感谢您的阅读-------------

本文标题:设计模式之简单工厂模式

文章作者:zoudong

发布时间:2017年10月12日 - 17:10

最后更新:2019年03月16日 - 15:03

原始链接:http://blog.zoudongq123.cn/2017/10/12/设计模式之简单工厂模式/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

分享