文章目录
  1. 1. 模式的定义
  2. 2. 模式的结构
  3. 3. UML图
  4. 4. 代码实现
    1. 4.1. Factory.java
    2. 4.2. Product.java
    3. 4.3. ConcreteProductA.java
    4. 4.4. ConcreteProductB.java
    5. 4.5. 测试类
  5. 5. 模式分析
  6. 6. 简单工厂模式的优点
  7. 7. 简单工厂模式的缺点

简单工厂模式在实际的开发应用比较多,今天我们来学习下设计模式中的简单工厂模式。
从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式。

模式的定义

简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。

模式的结构

简单工厂模式包含如下角色:

Factory: 工厂角色
工厂角色负责实现创建所有实例的内部逻辑

Product: 抽象产品角色
抽象产品角色是所创建的所有对象的父类,负责描述所有实例所共有的公共接口

ConcreteProduct: 具体产品角色
具体产品角色是创建目标,所有创建的对象都充当这个角色的某个具体类的实例。

UML图

代码实现

Factory.java

1
2
3
4
5
6
7
8
9
10
11
12
public class Factory {

public static Product createProduct(String s) {

if (s == "A") {
return new ConcreteProductA();
} else if (s == "B") {
return new ConcreteProductB();
}
return null;
}
}

Product.java

1
2
3
4
public interface Product {

void use();
}

ConcreteProductA.java

1
2
3
4
5
6
7
8
9
10
11
public class ConcreteProductA implements Product {

public ConcreteProductA() {
System.out.println("Create ConcreteProductA");
}

@Override
public void use() {
System.out.println("ConcreteProductA Use");
}
}

ConcreteProductB.java

1
2
3
4
5
6
7
8
9
10
11
public class ConcreteProductB implements Product {

public ConcreteProductB() {
System.out.println("Create ConcreteProductB");
}

@Override
public void use() {
System.out.println("ConcreteProductB Use");
}
}

测试类

1
2
3
4
5
6
7
8
 public class MyClass {

public static void main(String[] args) {

Product product = Factory.createProduct("A");
product.use();
}
}

其实以上代码可以不给出,我相信大家也可以写的出,根据UML图来写代码是编码的基本能力。

模式分析

  • 将对象的创建和对象本身业务处理分离可以降低系统的耦合度,使得两者修改起来都相对容易
  • 在调用工厂类的工厂方法时,由于工厂方法是静态方法,使用起来很方便,可通过类名直接调用,而且只需要传入一个简单的参数即可

简单工厂模式的优点

  • 工厂类含有必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例,客户端可以免除直接创建产品对象的责任,而仅仅“消费”产品;简单工厂模式通过这种做法实现了对责任的分割,它提供了专门的工厂类用于创建对象

  • 客户端无须知道所创建的具体产品类的类名,只需要知道具体产品类所对应的参数即可,对于一些复杂的类名,通过简单工厂模式可以减少使用者的记忆量。

简单工厂模式的缺点

  • 由于工厂类集中了所有产品创建逻辑,一旦不能正常工作,整个系统都要受到影响
  • 使用简单工厂模式将会增加系统中类的个数,在一定程序上增加了系统的复杂度和理解难度。

以上就是简单工厂模式的基本内容了,我们不是为了用设计模式而用设计模式,而应该根据实际情况来使用设计模式。

代码已经放到GitHub上了https://github.com/HJXANDHMR/DesignPattern

参考
http://design-patterns.readthedocs.io/zh_CN/latest/creational_patterns/simple_factory.html
http://www.cnblogs.com/ytaozhao/p/3387540.html

欢迎大家关注我的微信公众号,我会不定期的分享些Android开发的技巧

文章目录
  1. 1. 模式的定义
  2. 2. 模式的结构
  3. 3. UML图
  4. 4. 代码实现
    1. 4.1. Factory.java
    2. 4.2. Product.java
    3. 4.3. ConcreteProductA.java
    4. 4.4. ConcreteProductB.java
    5. 4.5. 测试类
  5. 5. 模式分析
  6. 6. 简单工厂模式的优点
  7. 7. 简单工厂模式的缺点