设计模式01-简单工厂模式

1.概念

简单工厂模式,属于类的创建型模式,又叫做静态工厂方法(Static Factory Method)模式,简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。

2.UML

image

各角色功能:

工厂角色Creator:简单工厂模式的核心,描述了所有产品的定义,包含了所有产品的逻辑方法。工厂类必须能够被外界调用,创建所需要的产品对象。

抽象产品Product:工厂角色创建的所有对象的父类,父类可以是借口,也可以是抽象类,他有所有具体产品的所有公共接口。

具体产品Concrete Product:工厂角色创建的对象的具体实例,一般都有共同的父类。

3.实例

实例1:

抽象产品:

package com.mageric.test;

/**
 * 简单工厂类抽象产品
 * @author Mageric
 *
 */
public interface ICreate {
    void Create();
}

具体产品3个 People、Animal、Plant

package com.mageric.test;

/**
 * 人类实现
 * 
 * @author Mageric
 *
 */
public class People implements ICreate {

    @Override
    public void Create() {
        // TODO Auto-generated method stub
        System.out.println("People Created");
    }

}
package com.mageric.test;

/**
 * 动物实现
 * 
 * @author Mageric
 *
 */
public class CAnimal implements ICreate {

    @Override
    public void Create() {
        // TODO Auto-generated method stub
        System.out.println("Animal Created");
    }

}
package com.mageric.test;

/**
 * 植物实现
 * 
 * @author Mageric
 *
 */
public class CPlant implements ICreate {

    @Override
    public void Create() {
        // TODO Auto-generated method stub
        System.out.println("Plant Created");
    }

}

最后是简单工厂:

package com.mageric.test;

/**
 * 简单工厂 用于创建产品
 * @author Mageric
 *
 */
public class SimpleFactory {
    public static ICreate Generator(String ProductionName) {
        switch (ProductionName) {
        case "People":
            return new CPeople();
        case "Animal":
            return new CAnimal();
        case "Plant":
            return new CPlant();
        default:
            System.out.println("No such production");
            return null;
        }
    }
}

在使用时,调用Generator("参数")。

客户端实现:

package com.mageric.test;

/**
 * 客户端实现
 * 
 * @author Mageric
 *
 */
public class Client {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        SimpleFactory simpleFactory = new SimpleFactory();
        ICreate icreate = simpleFactory.Generator("People");
        if (icreate != null) {
            icreate.Create();
        }
    }

}

实例2:

4.优缺点

优点:客户端通过提交给工厂类需要的参数信息,来创建具体的产品对象,而无需去关心这些产品是如何被创建的。

缺点:工厂类包含了所有实例创建的逻辑方法,一旦工厂类出现问题,所有的实例创建都会受到影响。另外所有的具体产品都基于抽象产品,当产品种类增加时,如果有不同的接口之类的,工厂类就需要判断何时创建何种种类的产品,这就和创建何种种类产品的产品相互混淆在了一起,违背了单一职责,导致系统丧失灵活性和可维护性。简单工厂模式违背了“开放封闭原则”,当系统需要增加一个具体产品时,很有可能需要返回修改工厂类。

5.实际应用

JDBC是SUN公司提供的一套数据库编程接口API,它利用Java语言提供简单、一致的方式来访问各种关系型数据库。Java程序通过JDBC可以执行SQL语句,对获取的数据进行处理,并将变化了的数据存回数据库,因此,JDBC是Java应用程序与各种关系数据进行对话的一种机制。用JDBC进行数据库访问时,要使用数据库厂商提供的驱动程序接口与数据库管理系统进行数据交互。比如说,当数据库从MySql切换到Oracle,需要改动地方就是切换一下驱动名称(前提条件是SQL语句是标准语句),其他的都不需要修改。

posted @ 2015-12-25 16:32  Mageric  阅读(196)  评论(0编辑  收藏  举报