`
zzq19860626
  • 浏览: 260864 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
博客专栏
B20df9e2-fb3d-3644-9f72-c1619842f682
设计模式学习笔记
浏览量:177891
87eaf24f-812a-3463-8e65-e3197d2ad8c2
java虚拟机
浏览量:26170
社区版块
存档分类
最新评论

JAVA设计模式学习4——简单工厂模式

阅读更多

 从这节开始学习设计模式,首先学习创建模式,其中工厂模式是创建模式里面最常见也常用的一种,工厂模式又分简单工厂模式(Simple Factory),工厂方法模式(Factory Method)和抽象工厂模式(Abstractor Factory),这里先学习最简单的也就是简单工厂模式。


简单工厂模式(Simple Factory)也称静态工厂方法模式,是工厂方法模式的特殊实现。简单工厂模式的一般性结构如下图:


         
简单工厂模式就是由一个工厂类根据传入的参量决定创建出哪一种产品类型的实例,下面我们拿实例来介绍简单工厂模式。如下图,抽象类型车包括子类火车,汽车,拖拉机。



工厂根据传入的参数来创建具体车的类型。上图中无法形象地表示抽象类所以用接口代替了。


java代码如下: 

 

package com.pattern.SimpleFactory;
/**
*
*【描述】:工厂类
*【作者】:alaric
*【时间 】:May 20, 2012
*【文件】:com.pattern.SimpleFactoryFactory.java
*
*/
public class Factory {
/**
*
*【描述】:创建车的实例 这个类里面的判断代码在实际应用中多配置成map,如果用spring 则可以配置在bean的xml内
*【作者】:alaric
*【时间 】:May 20, 2012
* @throws TypeErrorException
*
*/
    public TrafficMachine creator(String type) throws TypeErrorException{
        if(type.equals("Automobile")){
            return new Automobile();
        }else if (type.equals("Tractor")) {
            return new Tractor();
        }else if (type.equals("Train")) {
            return new Train();
        }else{
            throw new TypeErrorException("not find "+type);
        }
    }
}
package com.pattern.SimpleFactory;
/**
*
*【描述】:汽车类
*【作者】:alaric
*【时间 】:May 20, 2012
*【文件】:com.pattern.SimpleFactoryAutomobile.java
*
*/
public class Automobile extends TrafficMachine{
@Override
public void traffic() {
// TODO Auto-generated method stub
}
}
package com.pattern.SimpleFactory;
/**
*
*【描述】:拖拉机
*【作者】:alaric
*【时间 】:May 20, 2012
*【文件】:com.pattern.SimpleFactoryTractor.java
*
*/
public class Tractor extends TrafficMachine{
@Override
public void traffic() {
// TODO Auto-generated method stub
}
/**
*
*【描述】:耕地
*【作者】:alaric
*【时间 】:May 20, 2012
*
*/
public void plough(){
}
}
package com.pattern.SimpleFactory;
/**
*
*【描述】:火车
*【作者】:alaric
*【时间 】:May 20, 2012
*【文件】:com.pattern.SimpleFactoryTrain.java
*
*/
public class Train extends TrafficMachine {
private int nodeNum; //节数
private int trainNum; //车次
@Override
public void traffic() {
// TODO Auto-generated method stub
}
public int getNodeNum() {
return nodeNum;
}
public void setNodeNum(int nodeNum) {
this.nodeNum = nodeNum;
}
public int getTrainNum() {
return trainNum;
}
public void setTrainNum(int trainNum) {
this.trainNum = trainNum;
}
}
package com.pattern.SimpleFactory;
/**
*
*【描述】:抽象类 车
*【作者】:alaric
*【时间 】:May 20, 2012
*【文件】:com.pattern.SimpleFactoryMachine.java
*
*/
public abstract class TrafficMachine {
public float power ;
public float load ;
public abstract void traffic();
}
package com.pattern.SimpleFactory;
/**
*
*【描述】:类型异常类
*【作者】:alaric
*【时间 】:May 20, 2012
*【文件】:com.pattern.SimpleFactoryTypeErrorException.java
*
*/
public class TypeErrorException extends Exception{
/**
*
*/
private static final long serialVersionUID = 562037380358960152L;
public TypeErrorException(String message) {
super(message);
// TODO Auto-generated constructor stub
}
}

        通过以上分析及其代码列举可知,简单工厂类的构造有三种角色,它们分别是工厂角色,抽象产品角色和具体产品角色。工厂类的创建方法根据传入的参数来判断实例化那个具体的产品实例。

        工厂类角色:这个角色是工厂方法模式的核心,含有与应用紧密相连的商业逻辑。工厂类在客户端的直接调用下创建产品对象,它往往由一个具体的java类来实现。
        抽象产品角色:担当这个角色的是一个java接口或者java抽象类来实现。往往是工厂产生具体类的父类。
        具体产品角色:工厂方法模式所创建的任何对象都是这个角色的实例,具体产品往往就是一个具体的java类来承担。

简单工厂的优缺点:
         1、优点是因为客户端可以直接消费产品,而不关心具体产品的实现,免除了客户端直接创建产品对象的责任,简单工厂模式就是通过这种方法实现了对责任的分割。
         2、缺点是简单工厂在当产品多层次结构复杂时工厂只能依靠自己,这样就形成了一个万能类,如果这个工厂不能工作了,所有的创建都将不能实现,而且当产品类别多结构复杂的情况下,把所有创建放进一个工厂来,是的后期程序的扩展较为困难。这个困难将在下节(工厂方法)进行讲述。

 

 

设计模式系列目录:

  • 大小: 24.6 KB
  • 大小: 6.8 KB
3
3
分享到:
评论
6 楼 听风者森林 2017-02-16  
朕已阅,哈哈。感谢分享
5 楼 zzq19860626 2013-09-04  
QuarterLifeForJava 写道
嗯,或者采用单例模式,类似代码如下:
public class FruitFactory {

	private FruitFactory(){}
	
	private static final FruitFactory fruitFactory = new FruitFactory();
	
	public static FruitFactory getInstance(){
		return fruitFactory;
	}
	
	//如果改为下面的,那么就不需要单例了,直接FruitFactory.getMyFruit(fruitName)
	//public static Fruit getMyFruit(String fruitName)//静态工厂方法
	public Fruit getMyFruit(String fruitName)throws NotFindNeedFruitException{
		if(fruitName.equals("apple")){
			return new Apple();
		}else if(fruitName.equals("orange")){
			return new Orange();
		}else{
			throw new NotFindNeedFruitException("not find: "+fruitName);
		}
	}
}


对的
4 楼 QuarterLifeForJava 2013-09-04  
嗯,或者采用单例模式,类似代码如下:
public class FruitFactory {

	private FruitFactory(){}
	
	private static final FruitFactory fruitFactory = new FruitFactory();
	
	public static FruitFactory getInstance(){
		return fruitFactory;
	}
	
	//如果改为下面的,那么就不需要单例了,直接FruitFactory.getMyFruit(fruitName)
	//public static Fruit getMyFruit(String fruitName)//静态工厂方法
	public Fruit getMyFruit(String fruitName)throws NotFindNeedFruitException{
		if(fruitName.equals("apple")){
			return new Apple();
		}else if(fruitName.equals("orange")){
			return new Orange();
		}else{
			throw new NotFindNeedFruitException("not find: "+fruitName);
		}
	}
}

3 楼 zzq19860626 2013-08-08  
董宗磊 写道
Factory类中的creator方法应该定义成为static吧?

这个不一定的,一般工厂都会搞个getInstance()来获取实例,然后掉creator方法创建。
当然static的话 就可以直接调用了。
2 楼 董宗磊 2013-08-08  
Factory类中的creator方法应该定义成为static吧?
1 楼 东方胜 2013-07-30  

相关推荐

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

    这个是http://blog.csdn.net/dawanganban/article/details/9875873博客中java设计模式的源代码。下载前请先看《设计模式——简单工厂》一文。

    java23种设计模式——图解——附带源码

    java23种设计模式 工厂模式 ,抽象工厂,建造者模式,单态模式,原型模式

    设计模式——工厂方法模式

    这个是http://blog.csdn.net/dawanganban/article/details/9877593博客中java设计模式的源代码。下载前请先看《设计模式——工厂方法模式》一文。

    设计模式——工厂模式在开发中的应用(简单计算器)

    这个是http://blog.csdn.net/dawanganban/article/details/9884681博客中java设计模式的源代码。下载前请先看《设计模式——工厂模式在开发中的应用》一文。

    Java设计模式 版本2

    Java设计模式,目录:前言,UML建模技术,深入浅出UML类图,从招式与内功谈起——设计模式概述,面向对象设计原则,工厂三兄弟之简单工厂模式,工厂三兄弟之工厂方法模式,工厂三兄弟之抽象工厂模式,确保对象的唯一...

    Java设计模式——工厂设计模式详解

    主要介绍了Java设计模式——工厂设计模式详解,具有一定参考价值,需要的朋友可以了解下。

    简单工厂模式

    设计模式课程资料——简单工厂模式,使用Java实现,在eclipse进行编译

    java设计模式

    目录: 前 言 第一部分 大旗不挥,谁敢冲锋——热身篇 第1章 单一职责原则 1.1 我是“牛”类,我可以担任多职吗 1.2 绝杀技,打破你的传统思维 1.3 我单纯,所以我快乐 1.4 最佳实践 ...附录:23个设计模式

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

    简单工厂模式 工厂方法模式 抽象工厂模式 面向对象设计的基本原则: OCP(开闭原则,Open-Closed Principle):一个软件的实体应当对扩展开放,对修改关闭。 DIP(依赖倒转原则,Dependence Inversion Principle):...

    设计模式——JAVA.docx

    JAVA设计模式总结之23种设计模式 一:设计模式之六大原则 总原则:开闭原则(Open Close Principle) 开闭原则就是说对扩展开放,对修改关闭。 1.Abstract Factory(抽象工厂模式) 2.Adapter(适配器模式)......

    深入浅出设计模式四——比萨店生产比萨实现(工厂方法模式)

    NULL 博文链接:https://quicker.iteye.com/blog/607944

    Java设计模式:工厂模式——图文+代码示例(通俗易懂)

    先来看看,简单工厂模式——也叫静态工厂模式,这里举个例子:你要去买一台手机,你不用关心手机是怎么生产出来的,里面的零件具体又是怎么制造的,这些通通都交给工厂去处理,你尽管去买手机就好了。 简单工厂模式...

    深入浅出设计模式(中文版电子版)

    1.4GoF设计模式的分类 4 1.5模式的学习阶段 6 第2章负责任地设计对象——GRASP 9 2.1InformationExpert(信息专家) 11 2.2Creator(创造者) 13 2.3LowCoupling(低耦合) 14 2.4HighCohesion(高内聚) 15 ...

    深入浅出设计模式(中文版)

    1.4GoF设计模式的分类 4 1.5模式的学习阶段 6 第2章负责任地设计对象——GRASP 9 2.1InformationExpert(信息专家) 11 2.2Creator(创造者) 13 2.3LowCoupling(低耦合) 14 2.4HighCohesion(高内聚) 15 ...

    SETema5:软件设计模式——抽象工厂

    SETema5 软件设计模式——抽象工厂

    java和设计模式ppt教程

    java和设计模式ppt包含工厂模式、建造模式、原始模型模式、单例模式、结构模式、适配器、桥梁模式、合成模式、装饰模式、门面模式、享元模式、代理模式、行为模式、解释器模式、迭代子模式、调停者模式、备忘录模式...

    工厂模式实现数据库的增删改查

    利用JAVA设计模式——工厂模式实现对MYSQL数据库的增删改查

    设计模式(二) ——工厂模式 (3种工厂模式的实现及优缺点)

    工厂模式(Factory Pattern) 是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个...

    design-pattern-java.pdf

    六个创建型模式 六个创建型模式 简单工厂模式-Simple Factory Pattern 工厂三兄弟之简单工厂模式(一) 工厂三兄弟之简单工厂模式(二) 工厂三兄弟之简单工厂模式(三) 工厂三兄弟之简单工厂模式(四) 工厂方法...

Global site tag (gtag.js) - Google Analytics