简单工厂模式(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;
    }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

JAVA设计模式之 简单工厂模式【Simple Factory Pattern】

一、概述 er、适用场景
  • l416112167
  • l416112167
  • 2014年10月18日 21:48
  • 2653

简单工厂模式(Factory)

1、简单工厂using System; public interface ICar {      void run(); } public class BMWCar : ICar {      pub...
  • liuning0820
  • liuning0820
  • 2009年05月10日 21:51
  • 195

简单工厂模式--Factory

假设现在有一个游戏开发公司,有的程序员去写各种怪物,有的程序员去创建怪物对象,也就是说:后一种程序员是前一种程序员的客户。让后一种程序员去记住第一种程序员写的很多怪物的类名是很麻烦的,并且也不应该让后...
  • QQ575787460
  • QQ575787460
  • 2012年10月18日 20:35
  • 833

简单工厂模式(factory)

     工厂模式是创建模式的一种,在Java程序系统可以说是随处可见。为什么工厂模式是如此常用?因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如Bird bird...
  • zhmg860102
  • zhmg860102
  • 2009年08月31日 16:36
  • 199

简单工厂模式——Factory

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

Android设计模式之一个例子让你彻底明白工厂模式(Factory Pattern)

提出疑问这几天研究工厂模式的时候,看到网上的一些文章中举的例子我就很疑惑,我相信这也是许多人的疑惑:工厂模式的功能就是创建实例,我们创建实例直接new不就完了吗,干嘛还得再封装一层工厂类,然后用工厂类...
  • nugongahou110
  • nugongahou110
  • 2015年12月29日 13:36
  • 6235

Simple Factory简单工厂模式

//Simple Factory模式根据提供给它的数据,返回几个可能类中的一个类的实例。通常它返回的类都有一个公共的父类和公共的方法 //工厂类角色Creator (LightSimpleFacto...
  • yanhuatangtang
  • yanhuatangtang
  • 2017年06月07日 14:43
  • 145

简单工厂模式(Simple Factory Pattern)

工厂模式专门负责将大量有共同接口的类实例化。工厂模式可以动态决定将哪一个类实例化,不必事先知道每次要实例化哪一个类。工厂模式有以下几种形态: 简单工厂(Simple Factory)模式 ...
  • yuduoduo
  • yuduoduo
  • 2008年07月02日 20:38
  • 282

简单工厂模式(Static Factory Method

概念讲解 聚合(Aggregation):聚合表示一种弱的‘拥有’关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分【DPE】合成(Composition),组合:表示一种强的‘...
  • Butterfly_Dreaming
  • Butterfly_Dreaming
  • 2014年03月21日 11:53
  • 614

Simple Factory 简单工厂模式

 简单工厂模式(Simple Factory Pattern)介绍:简单工厂模式不能说是一个设计模式,说它是一种编程习惯可能更恰当些。因为它至少不是Gof23种设计模式之一。但它在实际的编程中经常被用...
  • zhongjiekangping
  • zhongjiekangping
  • 2009年09月14日 11:02
  • 314
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:简单工厂模式(Factory)
举报原因:
原因补充:

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