Java设计模式 -- 简单工厂模式(SimpleFactory)

一、什么是简单工厂模式

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

二、模式中包含的角色及其职责

1.工厂(Creator)角色简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。
2.抽象(Product)角色简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
3.具体产品(Concrete Product)角色简单工厂模式所创建的具体实例对象

三、具体实例

现在有两个类,分别是Apple和Banana,都有一个Get方法:

Apple.java

package cc.dewdrop;

public class Apple{
	public void get(){
		System.out.println("采集苹果");
	}
}

Banana.java

package cc.dewdrop;

public class Banana{
	public void get(){
		System.out.println("采集香蕉");
	}
}

在主方法中实例化并分别调用个体方法:

package cc.dewdrop;

public class SimpleFactory {

	public static void main(String[] args) {
		Apple apple = new Apple();
		Banana banana = new Banana();
		apple.get();
		banana.get();
    }
}

发现两个类都有一个共同的get方法,那么我们就可以抽象出一个接口,然后Apple和Banana两个类分别实现这个接口:

Fruit.java

package cc.dewdrop;

public interface Fruit {
	public void get();
}

Apple.java

package cc.dewdrop;

public class Apple implements Fruit{
	public void get(){
		System.out.println("采集苹果");
	}
}

Banana.java

package cc.dewdrop;

public class Banana implements Fruit{
	public void get(){
		System.out.println("采集香蕉");
	}
}

在主方法中就可以使用下面这种方式来创建对象:

public class SimpleFactory {

	public static void main(String[] args) {
		 Fruit apple = new Apple();
		 Fruit banana = new Banana();
		 apple.get();
		 banana.get();
    }
}

根据简单工厂模式的特点,现在就需要创建一个类来创建类的对象:

FruitFactory.java

package cc.dewdrop;

public class FruitFactory {
	 /**
	 * 获得Apple实例
	 */
	 public Fruit getApple() {
	 return new Apple();
	 }

	 /**
	 * 获得Banana实例
	 */
	 public Fruit getBanana() {
	 return new Banana();
	 }
}

在主方法中就可以使用如下方式进行调用:

public class SimpleFactory {

	public static void main(String[] args) {
		Fruit apple = new FruitFactory().getApple();
		Fruit banana = new FruitFactory().getBanana();
		apple.get();
		banana.get();
    }
}

再进一步,我们可以修改工厂类,使用静态方法来创建对象:

FruitFactory.java

package cc.dewdrop;

public class FruitFactory {
	 /**
	 * 获得Apple实例
	 */
	 public static Fruit getApple() {
	 return new Apple();
	 }

	 /**
	 * 获得Banana实例
	 */
	 public static Fruit getBanana() {
	 return new Banana();
	 }
}

在主方法中就可以直接使用类名来调用:

public class SimpleFactory {

	public static void main(String[] args) {
		Fruit apple = FruitFactory.getApple();
		Fruit banana = FruitFactory.getBanana();
		apple.get();
		banana.get();
    }
}

进一步改进工厂类,希望有一个公用的方法来创建所有产品的对象:

FruitFactory.java

package cc.dewdrop;

public class FruitFactory {
	public static Fruit getFruit(String type) throws InstantiationException, IllegalAccessException {
		if (type.equalsIgnoreCase("apple")) {
			return Apple.class.newInstance();
		} else if (type.equalsIgnoreCase("banana")) {
			return Banana.class.newInstance();
		} else {
			System.out.println("class not found");
		}
		return null;
	}
}

在主方法中使用如下方式调用:

public class SimpleFactory {

	public static void main(String[] args) {
		Fruit apple = FruitFactory.getFruit("apple");
		Fruit banana = FruitFactory.getFruit("banana");
		apple.get();
		banana.get();
    }
}

这样调用工厂类创建对象的操作就简化了很多,但是还有一个缺点,就是如果在新增加一个类是,就必须修改工厂类。那么此时工厂类可以做出如下修改:

FruitFactory.java

package cc.dewdrop;

public class FruitFactory {
	public static Fruit getFruit(String type)
			throws InstantiationException, IllegalAccessException, ClassNotFoundException {
		return (Fruit) Class.forName(type).newInstance();
	}
}

需要注意一点的是,在调用的时候需要使用类的完整路径(包括包名):

public class SimpleFactory {

	public static void main(String[] args) {
		Fruit apple = FruitFactory.getFruit("cc.dewdrop.Apple");
		Fruit banana = FruitFactory.getFruit("cc.dewdrop.Banana");
		apple.get();
		banana.get();
    }
}

四、简单工厂模式的优缺点

在这个模式中,工厂类是整个模式的关键所在。它包含必要的判断逻辑,能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。用户在使用时可以直接根据工厂类去创建所需的实例,而无需了解这些对象是如何创建以及如何组织的。有利于整个软件体系结构的优化
      不难发现,简单工厂模式的缺点也正体现在其工厂类上,由于工厂类集中了所有实例的创建逻辑,所以“高内聚”方面做的并不好。另外,当系统中的具体产品类不断增多时,可能会出现要求工厂类也要做相应的修改,扩展性并不很好。

时间: 2024-11-05 18:10:01

Java设计模式 -- 简单工厂模式(SimpleFactory)的相关文章

JAVA 设计模式 简单工厂模式

用途 简单工厂模式 (Simple Factory) 又叫做静态工厂方法(Static Factory Method)模式.简单工厂模式通常是定义一个工厂类,这个类可以根据不同变量返回不同类的产品实例. 简单工厂模式是一种对象创建型模式 (可参考 设计模式 创建型模式). 但是简单工厂模式不属于23种Gof设计模式之一. 结构 如何实现一个具有加减乘除基本功能的计算器? 对于这四种运算来说,都需要两个操作数,差别仅在于返回的结果不同. 由此,我们可以抽象化它们的共性,提炼出一个父类.这个类中包含

Java设计模式——简单工厂模式

1.    简单工厂模式 1.1 概述 又叫静态工厂方法模式,它定义一个具体的工厂类负责创建一些类的实例. 1.2 优点 客户端不需要在负责对象的创建,从而明确了各个类的职责. 1.3 缺点 这个静态工厂类负责所有对象的创建,如果有新的对象增加,或者某些对象的创建方式不同,就需要不断的修改工厂类,不利于后期的维护 2.     代码 Animal抽象类-Animal.java package cn.itcast_01; public abstract class Animal { public

Java设计模式-简单工厂模式(Static Factory Method)

简单工厂模式(Static Factory Method) 简单工厂模式是类的创建模式,又叫静态工厂方法(Static Factory Method)模式.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例.那么简单工厂模式应用在那些场景呢: 拿登录功能来说,假如应用系统需要支持多种登录方式如:口令认证,域认证(口令认证通常是去数据库中验证用户,而域认证则是需要到微软的域中去验证用户).那么自然的做法就是建立一个各种登录方式都适用的接口:如下图所示: package com.tutoria

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

 简单工厂设计模式 工厂模式就是专门负责将大量有共同接口的类实例化,而且不必事先知道每次是要实例化哪一个类的模式.它定义一个用于创建对象的接口,由子类决定实例化哪一个类. 核心知识点如下: (1) 大量共同定义的接口. (2) 由不同的对象去实现该接口. (3) 子类(具体工厂类)决定实例化哪一个类(具体产品类)有着“一对一”的关系. 前言(也算是工厂的一个应用需求场景吧) 最近在构建自动化测试平台,公司需求是:必须在IE,火狐,Google浏览器下回归测试用例.Selenium的webdriv

Java研究之学习设计模式-简单工厂模式详解

 简介: 从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例. 类图: 从UML类图中,可以看出,简单工厂模式的意思,就是把一个类内部,需要生成的部分,提取出来,变为一个工厂,通过工厂来new对象. 假设我们要吃苹果了,我们可以在代码中new一个苹果出来:当我们需要吃香蕉了,我们在代码中new一个香蕉出来.这种做法你会不会觉得麻烦

浅析JAVA设计模式之工厂模式(一)

1 工厂模式简介 工厂模式的定义:简单地说,用来实例化对象,代替new操作. 工厂模式专门负责将大量有共同接口的类实例化.工作模式可以动态决定将哪一个类实例化,不用先知道每次要实例化哪一个类. 工厂模式可以分一下三种形态: 简单工厂 (Simple Factory)模式:又称静态工厂模式(StaticFactory). 工厂方法 (Factroy Method)模式:又称多态性工厂模式(Polymorphic Factory). 抽象工厂 (Abstract Factroy)模式:又称工具箱模式

Java设计模式之工厂模式(Factory模式)介绍(转载)

原文见:http://www.jb51.net/article/62068.htm 这篇文章主要介绍了Java设计模式之工厂模式(Factory模式)介绍,本文讲解了为何使用工厂模式.工厂方法.抽象工厂.Java工厂模式举例等内容,需要的朋友可以参考下 工厂模式定义:提供创建对象的接口. 为何使用工厂模式 工厂模式是我们最常用的模式了,著名的Jive论坛,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见. 为什么工厂模式是如此常用?因为工厂模式就相当于创建实例对象的new,我们经

浅析JAVA设计模式之工厂模式(二)

1 工厂方法模式简介 工厂方法 (Factroy Method) 模式:又称多态性工厂模式(Polymorphic Factory),在这种模式中,核心工厂不再是一个具体的类,而是一个抽象工厂,提供具体工厂实现的接口,具体创建产品交由子工厂去做,抽象工厂不涉及任何产品被实例化的细节.而不同等级的产品,就对应一个不同等级的工厂,如下图. 图1 1.1工厂方法模式(多态性工厂模式): 工厂方法模式有三个角色: 1. 抽象产品接口 2. 具体产品类 3. 抽象工厂接口 4.具体工厂类. 1.2工厂方法

浅析JAVA设计模式之工厂模式(三)

在阅读本文之前,请先阅读(一)和(二)中的简单工厂模式和工厂方法模式. 1抽象工厂模式简介 抽象工厂 (Abstract Factroy) 模式:工具箱模式(kit).抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态,如下图. 图1.1 上图左边有一个工厂类的等级结构,右边有两个不同的产品等级结构,分别是产品A的等级结构和产品B的等级结构,工厂1和工厂2分别负责不同一个产品等级,同一个产品族的产品的生产.又例如下图: 图1.2 上图表示的是Button和Text两个不同产品的等级