java语言实现创建型模式——简单工厂模式

一、描述

简单工厂模式又名静态工厂方法模式,是所有工厂模式中最简单的一个,它定义一个具体的工厂类来负责创建所有类的对象并初始化创建的对象,它主要由3部分组成:工厂类、抽象类、实现抽象类的具体类,然后通过客户端调用工厂类创建相应的对象。

注意:简单工厂模式不属于GoF总结的23种设计模式,它是相当于初学java的HelloWorld案例,帮助初学者了解设计模式,增长信心的一个设计模式。

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

优点:相对于直接在客户端创建对象并初始化对象的值来说,简单工厂模式将创建对象和初始化任务交给了工厂类,客户端只负责对对象的调用,从而明确了各个类的职责。

缺点:只使用一个工厂类来创建各具特色的所有类,当具体产品的种类不断增加,对创建的方式有所改变时就需要对这个工厂类进行不断的改变,增加相应的判断,增加相应的类的创建逻辑,导致工厂类的代码越来越庞大,不利于后期的维护。另外,简单工厂模式使用静态方法来创建对象,这样就导致这个创建对象的静态方法不能被继承,只能在这一个类里变得越来越臃肿。

总结:虽然简单工厂模式将对象的创建和初始化工作与客户端分离了,实现了责任的分配策略,但是所有对象的创建和初始化工作都集中到了一个具体的工厂类中,如果要创建的对象种类繁多,这个工厂类将非常庞大,不利于后期维护。

三、源代码

package tong.day4_30.introduce;
/**
 * 定义一个薪资接口,所有公司的具体薪资计算都实现这个接口,并重写计算薪资的方法computeSalary()
 * @author tong
 *
 */
public interface Salary {
	public void computeSalary();
}
package tong.day4_30.introduce;
/**
 * 广东分公司的薪资计算类实现了Salary接口,并重写了该接口中的计算薪资的方法computeSalary()
 * @author Administrator
 *
 */
public class GuangdongSalary implements Salary {

	@Override
	public void computeSalary() {
		System.out.println("广东分公司薪资计算");

	}

}
package tong.day4_30.introduce;
/**
 * 河北公司的薪资计算类实现了Salary接口,并重写了该接口中的计算薪资的方法computeSalary()
 * @author tong
 *
 */
public class HebeiSalary implements Salary{
	@Override
	public void computeSalary() {
		System.out.println("河北分公司薪资计算");
	}

}
package tong.day4_30.introduce;
/**
 * 浙江分公司的薪资计算类实现了Salary接口,并重写了该接口中的计算薪资的方法computeSalary()
 * @author Administrator
 *
 */
public class ZhejiangSalary implements Salary {

	@Override
	public void computeSalary() {
		System.out.println("浙江分公司薪资计算");

	}

}
package tong.day4_30.introduce;
/**
 * 简单工厂类负责所有对象的创建和对象的初始化,这里采用java中的反射机制,根据传入的参数来创建类的对象
 * @author tong
 *
 */
public class SimpleFactory {
	//根据参数创建对象,这是一个静态方法可以直接使用类名调用
	public static Salary createSalary(String name) {
		Class<Salary> clazz = null;
		Salary salary = null;
		try {
			//利用反射机制获取该参数对应的类的对象
			clazz = (Class<Salary>) Class.forName(name);
			//使用此类对象创建对应的薪资类对象,这里使用父类指针指向子类对象,实现了多态
			salary = (Salary)clazz.newInstance();
		} catch (ClassNotFoundException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}catch (InstantiationException | IllegalAccessException e) {

			e.printStackTrace();
		}
		return salary;
	}

}
package tong.day4_30.introduce;
/**
 * 在客户端调用工厂类创建薪资的方法,并输出结果;
 * 如果还想创建更多的公司薪资,那么就创建一个相应的类,在Client对象中传入相应的参数创建相应的对象即可
 * @author tong
 *
 */
public class Client {
	public static void main(String[] args) {
		//创建Client对象,以此对象调用computeSalary()方法传入要类型参数
		new Client().computeSalary("tong.day4_30.introduce.HebeiSalary");
		new Client().computeSalary("tong.day4_30.introduce.ZhejiangSalary");
		new Client().computeSalary("tong.day4_30.introduce.GuangdongSalary");

	}
	/**
	 * 根据传入的参数调用工厂类的创建薪资方法,创建不同的薪资对象
	 * @param name
	 */
	public void computeSalary(String name) {
		//这里使用多态,根据传入参数的不同,生成ZhejiangSalary或者HebeiSalary对象
		Salary salary = SimpleFactory.createSalary(name);
		//使用生成的对象动态调用具体类对象的方法
		salary.computeSalary();
	}
}

四、运行结果

时间: 2024-10-07 06:32:52

java语言实现创建型模式——简单工厂模式的相关文章

java语言实现创建型设计模式—抽象工厂模式

一.描述 抽象工厂模式是在工厂方法的模式上进一步抽象而来,如果说工厂方法模式是对一个产品结构的创建而言的话,那么抽象工厂模式则是针对多个产品结构而言的,它被用来一次创建多个不同的产品对象. 我们要创建一个摩托车轮胎和摩托车把手,又要创建一个自行车轮胎和自行车把手,如果我们使用工厂方法模式的话我们需要四个类:创建摩托车轮胎的工厂类,创建摩托车把手的工厂类,创建自行车轮胎的工厂类和创建自行车把手的工厂类,但是如果我们使用抽象工厂方法的话,我们需要创建两个工厂类:创建摩托车轮胎和把手的工厂类,创建自行

&quot;围观&quot;设计模式(8)--创建型之简单工厂模式、工厂方法模式、抽象工厂模式

工厂模式的核心思想在我认为是将类创建的权利授予给工厂类,其他的类不允许创建,授予了权限的类创建好之后,需要某些的对象的时候,可以去工厂当中去取.也就是像一个工厂一样,用的人不需要关心对象怎么来的,你只需要关心怎么用就好了.工厂模式细分为三种,简单工厂.工厂方法.抽象工厂三种模式.这三种模式比较相似,往往会引发混淆,本文主要结合实际的例子去进行区分.理清三者之间的关系与适用范围. 概述 简单工厂 对于简单工厂,我个人的理解是,直接实现一个方法,要生产什么由这个方法以及传入的参数来决定. 工厂方法

PYTHON设计模式,创建型之简单工厂模式

这个系统,感觉思路清爽,,相信多练练,多思考,就会熟悉的.. http://www.jianshu.com/p/2450b785c329 #!/usr/bin/evn python #coding:utf8 class Pizza(object): def prepare(self, type): print 'prepare {type} pizza'.format(type=type) def bake(self, type): print 'bake {type} pizza'.forma

创建型模式 简单工厂模式

创建型模式 简单工厂模式 /** * 创建型模式 简单工厂模式 * 简单工厂模式属于类的创建型模式,又叫做静态工厂方法模式.通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类. * * 1.工厂(Creator)角色 * 简单工厂模式的核心,它负责实现创建所有实例的内部逻辑.工厂类可以被外界直接调用,创建所需的产品对象. * 2.抽象(Product)角色 * 简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口. * 3.具体产品(Concrete P

工厂模式——简单工厂模式

工厂模式分三类:简单工厂模式.工厂方法模式.抽象工厂模式. 首先介绍比较简单一种工厂模式——简单工厂模式. 我们以计算器作为一个例子来说明工厂模式到底是什么.作为一个几年前大一从C语言起步的初级程序员,到现在写代码的思维还是停留在结构化编程,虽然Java学了有几年了,总是说面向对象面向对象.但是让实现一个计算器的程序,估计大部分人都会以C语言式的结构化编程来写,几个if语句或者一个switch来搞定.我也同样不例外,为了提高自己的编程水平,所以一点点开始学设计模式.其实在很多开源代码里也有很多经

【一起学设计模式】状态模式+装饰器模式+简单工厂模式实战:(一)提交个订单我到底经历了什么鬼?

前言 之前在我的博客(一枝花算不算浪漫)中已经更新过两篇设计模式相关的内容 [一起学设计模式]策略模式实战一:基于消息发送的策略模式实战 [一起学习设计模式]策略模式实战二:配合注解 干掉业务代码中冗余的if else... [一起学设计模式]访问者模式实战:权限管理树删节点操作 [一起学设计模式]命令模式+模板方法+工厂方法实战: 如何优雅的更新商品库存... 上面内容都是基于真实业务场景精简后的设计(工作中真实场景使用到的). 之前为了学习设计模式,看过网上很多相关博客讲解,大都是画下UML

java语言实现创建型设计模式—工厂方法模式

一.描述 基于简单工厂模式中将所有类的创建和初始化放在一个工厂类中出现的问题,我们引进了工厂方法模式,该模式是GoF总结的23种设计模式的第一种,这个设计模式将一个工厂类拆分成多个具体的工厂类,每个具体的工厂类负责相应的类的对象的创建. 在工厂方法模式中,抽象工厂类负责定义创建对象的接口,具体对象的创建由实现该抽象工厂的具体工厂类来完成,它由四部分组成:抽象工厂类.实现抽象工厂类的具体工厂类.抽象类.实现抽象类的具体类. 二.工厂方法模式的优缺点 优点:在工厂方法模式中,创建对象的任务由具体的工

1 创建型模式-----简单工厂模式

1.1 模式定义 简单工厂模式:将创建不同对象的代码封装到具体产品类中: 将创建这些具体产品类的公共代码封装到到抽象产品类中: 定义一个工厂类,该类的静态方法可以根据不同参数创建不同的具体产品实例. 模式要点:需要什么类型的产品,只需传入一个正确的参数,就可以获得一个对应的实例. 1.2 模式结构图 1.3 模式角色 抽象产品Product: 具体产品类的父类,封装了各种具体产品的公共方法. 具体产品ConcreteProduct: 需要实例化的类. 工厂类Factory: 简单工厂模式的核心,

JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式)

在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.但是在一些情况下, new操作符直接生成对象会带来一些问题.举例来说, 许多类型对象的创造需要一系列的步骤: 你可能需要计算或取得对象的初始设置; 选择生成哪个子对象实例; 或在生成你需要的对象之前必须先生成一些辅助功能的对象. 在这些情况,新对象的建立就是一个 "过程",不仅是一个操作,像一部大机器中的一个齿轮传动. 模式的问题:你如何能轻松方便地构造对象实例,而不必关心构造对象实