java设计模式 -------- 创建模式 之 简单工厂模式

本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020

工厂模式是最常用的模式,因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a = new A(),工厂模式也是用来创建用来创建实例对象的,所以以后new时要多个心眼,是否可以考虑使用工厂模式。

简单工厂模式又可以分成三种模式:

1) 普通简单工厂模式

2) 多方法简单工厂模式

3) 多静态方法简单工厂模式

普通简单工厂模式:

举例:(简单的四则运算)

1.  创建四则运算的共同接口:

//操作类接口
public interface Operator{

	public double Operate(double d,double e);
}

2.  创建加减乘除实现类:

//加法类
public class AddOperator implements Operator{
	@Override
	public double Operate(double a, double b) {
		// TODO Auto-generated method stub
		return a + b;
	}
}
public class SubOperator implements Operator {

	@Override
	public double Operate(double a, double b) {
		// TODO Auto-generated method stub
		return a - b;
	}
}
public class MulOperator implements Operator {

	@Override
	public double Operate(double a, double b) {
		// TODO Auto-generated method stub
		return a * b ;
	}
}
public class DivOperator implements Operator {
	@Override
	public double Operate(double a, double b) {

			try {
				if(b == 0)
					throw new Exception("除数不能为0!");
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		return a / b;
	}
}

3.  创建工厂类:

public class OperatorFactory {
	public Operator createOperator(String operate){
		Operator oper = null;
		switch(operate){
			case "+" :
				oper = new AddOperator();
				break;
			case "-" :
				oper = new SubOperator();
				break;
			case "*" :
				oper = new MulOperator();
				break;
			case "/" :
				oper = new DivOperator();
				break;
		}
		return oper;
	}
}

4. 最后就是测试类了:

public class FactoryTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		OperatorFactory factory = new OperatorFactory();
		Operator oper = factory.createOperator("*");
		double result = oper.Operate(3.6,4.8);
		System.out.println(result);
	}

}

多方法简单工厂模式:

在上述普通简单工厂模式中,设想这样一种状况,如果传递进来的参数是空,或者是别的不合法字符,则不能正确的创建对象,而多方法简单工厂模式则提供多个工厂方法,分别创建对象。

和普通的不同之处仅在工厂类,改动如下:

public class OperatorFactory {

	public Operator createAddOperator(){
		return new AddOperator();
	}
	public Operator createSubOperator(){
		return new SubOperator();
	}
	public Operator createMulOperator(){
		return new MulOperator();
	}
	public Operator createDivOperator(){
		return new DivOperator();
	}
}

这样,在测试时,就不需要传递相应的参数,只需要调用需要的工厂方法,即可:

public class FactoryTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		OperatorFactory factory = new OperatorFactory();
		/*Operator oper = factory.createOperator("*");*/
		Operator oper = factory.createMulOperator();
		double result = oper.Operate(3.6,4.8);
		System.out.println(result);
	}
}

多静态方法简单工厂模式:

所谓的静态方法,即将上面工厂类中的工厂方法置为静态的,不需要创建实例,直接调用即可。

public class OperatorFactory {

	public static Operator createAddOperator(){
		return new AddOperator();
	}
	public static Operator createSubOperator(){
		return new SubOperator();
	}
	public static  Operator createMulOperator(){
		return new MulOperator();
	}
	public static Operator createDivOperator(){
		return new DivOperator();
	}
}

如上,将工厂方法设为静态的,则在测试时,直接调用即可。

public class FactoryTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		 //OperatorFactory factory = new OperatorFactory();
		/*Operator oper = factory.createOperator("*");*/
		Operator oper = OperatorFactory.createMulOperator();
		double result = oper.Operate(3.6,4.8);
		System.out.println(result);
	}
}

总体来说,工厂模式适合:凡是出现了大量的产品需要创建,并且具有共同的接口时,可以通过工厂方法模式进行创建。在以上的三种模式中,第一种如果传入的字符串有误,不能正确创建对象,第三种相对于第二种,不需要实例化工厂类,所以,大多数情况下,我们会选用第三种——静态工厂方法模式。

时间: 2024-12-21 07:55:56

java设计模式 -------- 创建模式 之 简单工厂模式的相关文章

Java设计模式(一) 简单工厂模式不简单

原创文章,转载请务必将下面这段话置于文章开头处. 本文转发自Jason's Blog,原文链接 http://www.jasongj.com/design_pattern/simple_factory 简单工厂模式使用案例 有一种抽象产品--汽车(Car),同时有多种具体的子类产品,如BenzCar,BMWCar,LandRoverCar.类图如下 作为司机,如果要开其中一种车,比如BenzCar,最直接的做法是直接创建BenzCar的实例,并执行其drive方法,如下 package com.

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

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

设计模式_创建型模式_简单工厂模式

转载自:http://blog.csdn.net/lovelion  作者:刘伟 简单工厂模式并不属于GoF 23个经典设计模式,但通常将它作为学习其他工厂模式的基础,它的设计思想很简单,其基本流程如下:        首先将需要创建的各种不同对象(例如各种不同的Chart对象)的相关代码封装到不同的类中,这些类称为具体产品类, 而将它们公共的代码进行抽象和提取后封装在一个抽象产品类中,每一个具体产品类都是抽象产品类的子类: 然后提供一个工厂类用于创建各种产品,在工厂类中提供一个创建产品的工厂方

设计模式(一)——简单工厂模式

嵌入式linux 设计模式(一)--简单工厂模式 一.简单工厂模式简介 1.简单工厂模式 简单工厂模式(Factory Method Pattern)是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例. 简单工厂模式的UML类图 工厂角色(Creator):是简单工厂模式的核心,由它负责创建所有的类的内部逻辑.工厂类必须能够被

设计模式(1)--简单工厂模式、策略模式

1. 简单工厂模式 在阎宏博士的<JAVA与模式>一书中开头是这样描述简单工厂模式的:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例. 先放图再解释.下图一是从<大话设计模式>中摘出来的.问题是:用任意一种面向对象语言实现一个计算器控制台程序,要求输入两个数和运算符号,得到结果. 简单工厂模式实现的关键点有两个: 1. 继承:定义一个抽象父类“抽象产品”(Operation类

设计模式(四)简单工厂模式

相关文章 设计模式(一)设计六大原则 设计模式(二)单例模式的七种写法 设计模式(三)建造者模式 1.简单工厂模式简单介绍 定义 简单工厂模式属于创建型模式又叫做静态工厂方法模式,是由一个工厂对象决定创建出哪一种产品类的实例. 简单工厂模式结构图 Factory:工厂类,简单工厂模式的核心.它负责实现创建全部实例的内部逻辑.工厂类的创建产品类的方法能够被外界直接调用.创建所需的产品对象. IProduct:抽象产品类.简单工厂模式所创建的全部对象的父类,它负责描写叙述全部实例所共同拥有的公共接口

设计模式笔记——策略模式VS简单工厂模式

策略模式VS简单工厂模式   策略模式(Strategy)它定义了算法家族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户. 1.组成 -抽象策略角色: 策略类,通常由一个接口或者抽象类实现. -具体策略角色:包装了相关的算法和行为. -环境角色:持有一个策略类的引用,最终给客户端调用. 2.应用场景 - 多个类只区别在表现行为不同,可以使用Strategy模式,在运行时动态选择具体要执行的行为. -需要在不同情况下使用不同的策略(算法),或者策略还可能在未来

设计模式粗浅理解之一------简单工厂模式

设计模式粗浅理解之------简单工厂模式 什么是简单工厂模式 从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例.简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现. 角色和职责 工厂(Creator)角色 简单工厂模式的核心,它负责实现创建所有实例的内部逻辑.工厂类可以被外界直接调用,创建所需的产

设计模式之策略模式&amp;amp;简单工厂模式

学习设计模式已经有非常长一段时间了,事实上先前已经敲过一遍了.可是老认为没有学到什么,认识也不够深刻.如今趁着重构机房,再又一次来过,也不晚. 事实上在敲了机房之后,看看模式,事实上,曾经非常难理解.非常难看懂的代码一眼就能够看懂了,趁着有点感觉了.早点收获吧. 简单工厂模式: 简单地说简单工厂模式:非常easy变化的地方,就能够用到简单工厂模式. 实例: 举个样例:我们在逛商场时.正好商场促销,各种优惠活动:有满300返100 ,有打8折的.抽奖等等吧. 促销来讲,各种优惠活动事实上就是变化.