Java设计模式--工厂模式

简单工厂方法模式(别名:虚拟构造)

定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。

Mediator Pattern(Another Name: Virtual Constructor)

Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory Method lets a class defer instantiation to subclasses.

类图

模式的结构与使用

工厂方法模式的结构中包括四个角色。

  • 抽象产品(Product):抽象类或接口,负责定义具体产品必须实现的方法。
  • 具体产品(Concrete Product):具体产品是一个类,如果Product是一个抽象类,那么具体产品是Product的子类;如果Product是一个接口,那么具体产品去实现接口。
  • 构造者(Creator):一个接口或者抽象类。构造者负责定义一个称作工厂方法的抽象方法,该方法返回具体产品类的实例。
  • 具体构造者(Concrete Creator):具体构造者重写工厂方法使该方法返回具体产品的实例。

简单的例子

Product的抽象类Animals.java

1
2
3
4
5
6
package virtualconstructor;
public abstract class Animals {
String name;
public abstract void move();
}

ConcreteProduct的实现类Dog.java

1
2
3
4
5
6
7
8
9
10
11
12
package virtualconstructor;
public class Dog extends Animals{
public Dog() {
name = "狗";
}
public void move () {
System.out.println(name + "是走");
}
}

ConcreteProduct的实现类Cat.java

1
2
3
4
5
6
7
8
9
10
11
12
13
package virtualconstructor;
public class Cat extends Animals {
public Cat() {
name = "猫";
}
@Override
public void move() {
System.out.println(name + "是飞");
}
}

Creator的抽象类Creator.java

1
2
3
4
5
6
package virtualconstructor;
public abstract class Creator {
Animals animal;
public abstract Animals getAnimal();
}

ConcreteCreator的实现类DogCreator.java

1
2
3
4
5
6
7
8
9
package virtualconstructor;
public class DogCreator extends Creator {
@Override
public Animals getAnimal() {
return new Dog();
}
}

ConcreteCreator的实现类CatCreator.java

1
2
3
4
5
6
7
8
9
package virtualconstructor;
public class CatCreator extends Creator {
@Override
public Animals getAnimal() {
return new Cat();
}
}

测试类Application.java

1
2
3
4
5
6
7
8
9
10
11
package virtualconstructor;
public class Application {
public static void main(String[] args) {
DogCreator dog = new DogCreator();
dog.getAnimal().move();
CatCreator cat = new CatCreator();
cat.getAnimal().move();
}
}

工厂模式的优点

  • 使用工厂模式可以让用户的代码和某个特定类的子类的代码解耦。
  • 工厂方法的使用用户不必知道它所使用的对象是怎么被创建的,只需要知道该对象有哪些方法即可。

适用工厂模式的情景

  • 用户需要一个类的子类的实例,但不希望与该类的子类形成耦合。
  • 用户需要一个类的子类的实例,但用户不知道该类有哪些子类可用。

下载源码请到

MyGitHub

文章目录
  1. 1. 简单工厂方法模式(别名:虚拟构造)
  2. 2. Mediator Pattern(Another Name: Virtual Constructor)
  3. 3. 类图
  4. 4. 模式的结构与使用
  5. 5. 简单的例子
    1. 5.1. Product的抽象类Animals.java
    2. 5.2. ConcreteProduct的实现类Dog.java
    3. 5.3. ConcreteProduct的实现类Cat.java
    4. 5.4. Creator的抽象类Creator.java
    5. 5.5. ConcreteCreator的实现类DogCreator.java
    6. 5.6. ConcreteCreator的实现类CatCreator.java
    7. 5.7. 测试类Application.java
  6. 6. 工厂模式的优点
  7. 7. 适用工厂模式的情景
  8. 8. 下载源码请到