简单工厂模式(Factory)

原创 2016年07月09日 10:26:35

1. 模式的定义

问题的描述:

//这种方式与面向接口编程的封装行为相悖
Api api = new Impl();

现在的Client,它知道要使用Api接口,但是不知由谁实现,也不知道如何实现,该怎么办?

简单工厂的定义:

提供一个创建对象实例的功能,而无需关心其具体实现。

2. UML图

这里写图片描述
Api:定义客户端所需要的功能接口
ImplA,ImplB:具体实现Api的实例类
Factorty:工厂类,选择合适的实现类来创建对象
Client:客户端,通过Factory来获取Api接口对象

代码:

/**
 * 接口的定义,该接口可以通过简单工厂来创建
 */
public interface Api {
    /**
     * 示意,具体的功能方法的定义
     * @param s 示意,需要的参数
     */
    public void operation(String s);
}

/**
 * 接口的具体实现对象A 
 */
public class ImplA implements Api{
    public void operation(String s) {
        //实现功能的代码,示意一下
        System.out.println("ImplA s=="+s);
    }
}

/**
 * 接口的具体实现对象B 
 */
public class ImplB implements Api{
    public void operation(String s) {
        //实现功能的代码,示意一下
        System.out.println("ImplB s=="+s);
    }
}

/**
 * 工厂类,用来创造Api对象
 */
public class Factory {
    /**
     * 具体的创造Api对象的方法
     * @param condition 示意,从外部传入的选择条件
     * @return 创造好的Api对象
     */
    public static Api createApi(int condition){
        //应该根据某些条件去选择究竟创建哪一个具体的实现对象
        //这些条件可以从外部传入,也可以从其它途径获取
        //如果只有一个实现,可以省略条件,因为没有选择的必要

        //示意使用条件
        Api api = null;
        if(condition == 1){
            api = new ImplA();
        }else if(condition == 2){
            api = new ImplB();
        }
        return api;
    }
}

/**
 * 客户端,使用Api接口
 */
public class Client {
    public static void main(String[] args) {
        //通过简单工厂来获取接口对象
        Api api = Factory.createApi(1);
        api.operation("正在使用简单工厂");
    }
}

3. 研磨设计模式

接口的思想:封装隔离。对被隔离体的行为的封装,隔离是指外部调用和内部实现,外部调用只能通过接口进行调用,外部调用不知道内部具体实现的,即外部调用和内部实现是被接口隔离开的。

接口是用来封装隔离具体实现的

简单工厂命名的建议:
类名称建议:”模块名称+Factory”
方法名称建议:”get+接口名称”或者”create+接口名称”

简单工厂的实质:选择实现

新增一个实现类就要修改Factory,解决方法:使用配置文件

/**
 * 工厂类,用来创造Api对象
 */
public class Factory {
    /**
     * 具体的创造Api的方法,根据配置文件的参数来创建接口
     * @return 创造好的Api对象
     */
    public static Api createApi(){
        //直接读取配置文件来获取需要创建实例的类

        //至于如何读取Properties还有如何反射这里就不解释了
        Properties p = new Properties(); 
        InputStream in = null;
        try {
            in = Factory.class.getResourceAsStream("FactoryTest.properties");
            p.load(in);
        } catch (IOException e) {
            System.out.println("装载工厂配置文件出错了,具体的堆栈信息如下:");
            e.printStackTrace();
        }finally{
            try {
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        //用反射去创建,那些例外处理等完善的工作这里就不做了
        Api api = null;
        try {
            api = (Api)Class.forName(p.getProperty("ImplClass")).newInstance();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        return api;
    }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

简单工厂模式(Simple Factory Pattern)

意图: •专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类. •(Simple Factory)模式又称为静态工厂方法(Static Factory Metho...

简单工厂模式——Factory

专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。它又称为静态工厂方法模式,属于类的创建型模式。   简单工厂模式的UML类图                        ...

简单工厂模式/Simple Factory

简单工厂模式/Simple Factory 意图/适用场景: 如果系统中存在众多的产品类,而且这些产品类都可以抽象出统一的接口,简单工厂模式就可能会适用。 使用者不必自己去创建每一个...
  • fyzhao
  • fyzhao
  • 2011年11月06日 11:46
  • 839

PHP简单工厂模式(simple factory)趣味讲解

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

C++简单工厂模式-Static Factory Method

一.简单工厂模式又称静态工厂方法模式(Static Factory Method),它不是Gof 所讲的23种设计模式之一,但是它却是我们在编码过程中经常使用的方法之一。   1.静态工厂方法统一...
  • J_Jeff
  • J_Jeff
  • 2014年10月18日 10:21
  • 352

简单工厂模式(Simple Factory)

主要类: 1、产品抽象类。 2、工厂类(抽象类,且里面是静态方法)。 运行方式: 用户使用工厂直接调用里面的静态方法可以拿到具体产品,这个具体产品用使用他的抽象类表示。 /*...
  • hualom
  • hualom
  • 2012年03月14日 09:57
  • 524

1.简单工厂模式 Simple Factory Pattern

一、什么是简单工厂模式 简单工厂模式属于类的创建型模式,又叫做静态工厂方法模式。通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。 二、模式中包含的角色及其职责 1...

简单工厂模式Static Factory Method

简单工厂模式(Simple Factory Pattern)属于类的创新型模式,又叫静态工厂方法模式(Static FactoryMethod Pattern),是通过专门定义一个类来负责创建其他类的...

简单工厂模式(Simple Factory)

工厂模式,谈到这种模式时,主要是关注工厂角色的设计,也因为工厂的变化而分成三种不同的工厂模式,而其它的角色的变化,会使工厂的设计发生适应性改变。 简单工厂模式(Simple Factory)是工厂模...
  • KUXINR
  • KUXINR
  • 2012年04月25日 17:43
  • 351
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:简单工厂模式(Factory)
举报原因:
原因补充:

(最多只允许输入30个字)