- 含义
- 简单工厂模式又叫静态方法模式(因为工厂类定义了一个静态方法)
- 现实生活中,工厂是负责生产产品的;同样在设计模式中,简单工厂模式我们可以理解为负责生产对象的一个类,称为“工厂类”。
- 主要作用
将“类实例化的 *** 作”与“使用对象的 *** 作”分开,让使用者不用知道具体参数就可以实例化出所需要的“产品”类,从而避免了在客户端代码中显式指定,实现了解耦。使用者可直接消费产品而不需知道生产的细节
// 内聚,通俗的来讲,就是自己的东西自己保管,自己的事情自己做
// 只要两个对象之间存在一方依赖一方的关系,那么我们就称这两个对象之间存在耦合。耦合的程度就是耦合度,也就是双方依赖的程度。
// 一般来说耦合度过高并不是一件好事。因此,就必须要降低耦合,而这个过程就叫做解耦和。
- 基本组成
以一个UML类图来看:
-
Product: 抽象产品类(具体产品父类),用于描述产品的公共接口
-
Concrete Product: 具体产品类(抽象产品子类),用于描述生产的具体产品
-
SimpleFactory: 工厂类,根据传入不同参数从而创建不同具体产品类的实例
- 实现步骤
- 创建抽象产品类 ;
- 创建具体产品类(继承抽象产品类);
- 创建工厂类,通过创建静态方法根据传入不同参数从而创建不同具体产品类的实例;
- 外界通过调用工厂类的静态方法,传入不同参数从而创建不同具体产品类的实例.
- 实例
假如我有一个游戏工厂,我现在希望使用简单工厂模式实现2款游戏的生产
- 第一步, 创建抽象产品类
public abstract class Product {
public abstract void Game();
}
- 第二步,创建具体产品类(继承抽象产品类)
public class CS extends Product {
@Override
public void Game() {
System.out.println("游戏CS发行!");
}
}
public class PVZ extends Product {
@Override
public void Game() {
System.out.println("游戏PVZ发行!");
}
}
- 第三步,创建工厂类,通过创建静态方法从而根据传入不同参数创建不同具体产品类的实例
public class GameFactory {
public static Product GameType(Object GameName) {
switch ((String) GameName) {
case "PVZ":
return new PVZ();
case "CS":
return new CS();
default:
return null;
}
}
}
- 第四步,外界通过调用工厂类的静态方法,传入不同参数从而创建不同具体产品类的实例
public class TestSimpleFactory {
public static void main(String[] args) {
GameFactory myFacatory = new GameFactory();
try {
myFacatory.GameType("PVZ").Game();
}catch (NullPointerException e){
System.out.println("没有这一类产品");
}
try {
myFacatory.GameType("CS").Game();
}catch (NullPointerException e){
System.out.println("没有这一类产品");
}
try {
myFacatory.GameType("BS").Game();
}catch (NullPointerException e){
System.out.println("没有这一类产品");
}
}
}
输出结果:
6. 小结
-
将创建实例的工作与使用实例的工作分开,使用者不必关心类对象如何创建,实现了解耦
-
把初始化实例时的工作放到工厂里进行,使代码更容易维护。 更符合面向对象的原则 & 面向接口编程,而不是面向实现编程;
-
工厂类集中了所有实例(产品)的创建逻辑,一旦这个工厂不能正常工作,整个系统都会受到影响;
-
简单工厂模式由于使用了静态工厂方法,静态方法不能被继承和重写,会造成工厂角色无法形成基于继承的等级结构;
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)