一、分类
工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。
1)简单工厂模式(Simple Factory):不利于产生系列产品;
2)工厂方法模式(Factory Method):又称为多形性工厂;
3)抽象工厂模式(Abstract Factory):又称为工具箱,产生产品族,但不利于产生新的产品;
这三种模式从上到下逐步抽象,并且更具一般性。GOF在《设计模式》一书中将工厂模式分为两类:工厂方法模式(Factory Method)与抽象工厂模式(Abstrac Factory)。将简单工厂模式(Simple Factory)看为工厂方法模式的一种特例,两者归为一类。
二、简单工厂模式
简单工厂模式又称静态工厂方法模式。它存在的目的很简单:定义一个用于创建对象的接口。
在简单工厂模式中,一个工厂类处于对产品类实例化调用的中心位置上,它决定那一个产品类应当被实例化。
组成部分:
1) 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java中它往往由一个具体类实现。
2) 抽象产品角色:它一般是具体产品继承的父类或者实现的接口。在java中由接口或者抽象类来实现。
3) 具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。
类图如下:
举个小例子:
- package com.demo.test;
- //抽象产品角色
- interface Cat{
- public void eat();
- }
- //具体产品角色
- class WhiteCat implements Cat{
- @Override
- public void eat() {
- // TODO Auto-generated method stub
- System.out.println("今天白猫吃鱼");
- }
- }
- //具体产品角色
- class BlackCat implements Cat{
- @Override
- public void eat() {
- // TODO Auto-generated method stub
- System.out.println("今天黑猫吃鱼");
- }
- }
- //工厂类角色
- class Host{
- public static Cat feed(String s){
- if ("WhiteCat".equalsIgnoreCase(s)) {
- return new WhiteCat();
- }
- else if("BlackCat".equalsIgnoreCase(s))
- {
- return new BlackCat();
- }
- else
- {
- return new BlackCat();
- }
- }
- }
- public class SimpleFactory {
- public static void main(String[] args) {
- // 主人说今天白猫吃鱼
- Cat cat = Host.feed("WhiteCat");
- cat.eat();
- }
- }
结果如下:
今天白猫吃鱼

















