`
MySSH
  • 浏览: 64097 次
  • 性别: Icon_minigender_1
  • 来自: 贵阳
社区版块
存档分类
最新评论

简单的工厂模式测试代码

阅读更多
工厂模式定义:提供创建对象的接口。
为何使用?   
工厂模式是我们最常用的模式了,著名的Jive论坛 ,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见。   
为什么工厂模式是如此常用?因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=new A() 工厂模式也是用来创建实例对象的,所以以后new时就要多个心眼,是否可以考虑使用工厂模式,虽然这样做,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量。
我们以类Student为例, 如果我们要创建Student的实例对象:
Student student = new Student();
可是,实际情况是,通常我们都要在创建student实例时做点初始化的工作,比如赋值 查询数据库等。   
首先,我们想到的是,可以使用Student的构造函数,这样生成实例就写成:   
Student student = new Student(参数);
但是,如果创建student实例时所做的初始化工作不是象赋值这样简单的事,可能是很长一段代码,如果也写入构造函数中,那你的代码很难看了。
 为什么说代码很难看,初学者可能没有这种感觉,我们分析如下,初始化工作如果是很长一段代码,说明要做的工作很多,将很多工作装入一个方法中,相当于将很多鸡蛋放在一个篮子里,是很危险的,这也是有背于Java面向对象的原则,面向对象的封装(Encapsulation)和分派(Delegation)告诉我们,尽量将长的代码分派“切割”成每段,将每段再“封装”起来(减少段和段之间偶合联系性),这样,就会将风险分散,以后如果需要修改,只要更改每段,不会再发生牵一动百的事情。
  在本例中,首先,我们需要将创建实例的工作与使用实例的工作分开, 也就是说,让创建实例所需要的大量初始化工作从Student的构造函数中分离出去。   
这时我们就需要Factory工厂模式来生成对象了,不能再用上面简单new Student(参数)。还有,如果Student有个继承如XiaoXueStudent, 按照面向接口编程,我们需要将Student抽象成一个接口.现在Student是接口,有两个子类XiaoXueStudent 和GaoZhongStudent.我们要实例化他们时,
如下:   
Student student1=new XiaoXueStudent();   
Student student2=new GaoZhongStudent(); 


随着项目的深入,Student可能还会"生出很多儿子出来", 那么我们要对这些儿子一个个实例化,更糟糕的是,可能还要对以前的代码进行修改:加入后来生出儿子的实例.这在传统程序中是无法避免的。 
但如果你一开始就有意识使用了工厂模式,这些麻烦就没有了。  
工厂方法   
你会建立一个专门生产Student实例的工厂:   
public class TestFactory{

	public static Student CreatFactory(int a){
		Student student = null;
		if(a==1){
			student=new GaoZhongStudent();
		}
		else if(a==2){
			student=new XiaoXueStudent();
		}
		return student;
	}
}
那么在你的程序中,如果要实例化Student时.就使用
Student student = TestFactory.CreatFactory(1);
这样,在整个就不涉及到Student的具体子类,达到封装效果,也就减少错误修改的机会,这个原理可以用很通俗的话来比喻:就是具体事情做得越多,越容易范错误.这每个做过具体工作的人都深有体会,相反,官做得越高,说出的话越抽象越笼统,范错误可能性就越少.好象我们从编程序中也能悟出人生道理?  
使用工厂方法 要注意几个角色,首先你要定义产品接口,如上面的Student,产品接口下有Student接口的实现类,如GaoZhongStudent,其次要有一个factory类,用来生成产品Student。
----------------------------------------------------------------------
本例源码如下:

1、定义一个学生接口:
package com.zuxia.lei.factory;

public interface Student {
      public void Study();
}

2、编写2个实现类:
XiaoXueStudent.java如下:

package com.zuxia.lei.factory;

public class XiaoXueStudent implements Student {

	
	public void Study() {
		
		System.out.println("XiaoXueStudent are Studying!");

	}

}

GaoZhongStudent.java如下:

package com.zuxia.lei.factory;

public class GaoZhongStudent implements Student {

	
	public void Study() {
		
		System.out.println("GaoZhongStudent are Studying!");

	}

}

3、创建一个TestFactory类
package com.zuxia.lei.factory;

/**
 * 工厂模式:首先得定义接口,是创建和使用分开->工厂->类->完成创建的过程
 * 接口(一系列产品都在工厂里处理) 
 * 工厂模式分为简单模式和抽象模式
 * @author LeiZhongQiang
 *
 */
public class TestFactory{

	public static Student CreatFactory(int a){
		Student student = null;
		if(a==1){
			student=new GaoZhongStudent();
		}
		else if(a==2){
			student=new XiaoXueStudent();
		}
		return student;
	}
}

4、测试类:
TestMain.java如下:
package com.zuxia.lei.factory;

public class TestMain {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Student student = TestFactory.CreatFactory(1);
		student.Study();

	}
}
5、控制台输出:
GaoZhongStudent are Studying!
1
0
分享到:
评论

相关推荐

    工厂模式的测试代码

    工厂模式的测试代码!工厂模式的测试代码

    简单工厂模式

    java设计模式 简单工厂模式详解 simple factory static pattern

    工厂模式测试代码

    工厂模式和抽象工厂模式的对比,俩者的一些区别和相似

    简单工厂模式实例 C++

    代码完整地描述了简单工厂模式,包括工厂实例、产品抽象类、具体产品。已经过测试,编译没有问题。非常适合初学者使用。

    AJAX+Struts+简单DAO工厂模式分页源代码

    -AJAX整合Struts无刷新分页.IE和FireFox都能运行 -在Eclipse3.1+MyEclipse4.3+TomCat5.5.12下测试通过 -在Eclipse3.3+MyEclipse6.0.1+TomCat5.5.15下测试通过 -注释详细 -希望初学者能有所收获,高手...

    软件设计模式与体系结构(讲解+代码)

     【例2.2】简单工厂方法模式-汽车保险  【例2.3】工厂方法模式-汽车保险  【例2.4】抽象工厂模式-房屋信息  【例2.5】生成器模式-房屋信息  【例2.6】单例模式-互联网连接  【例3.2】组合模式-五子棋...

    java设计模式-备忘录模式源代码

    java设计模式-备忘录模式源代码, 源码中为设计模式的工程源文件,已经测试过,没有问题。

    安卓手机拨号键盘隐藏工程代码

    安卓手机拨号键盘隐藏工程代码。在拨号面板中输入就可执行,但不保证所有代码在你的手机上都可执行。

    android平台工厂测试模式

    android平台工厂测试模式代码,主要用于输入指令测试平台硬件。

    android 工厂模式apk 源代码

    模仿酷派等手机的工厂模式的一个apk,源代码如附件。 调用各种接口和传感器,触摸屏/显示/亮度/相机/光感/地磁感/距离感/重力感等等。

    c++工厂模式

    使用vs2015平台,对三种工厂模式使用了C++进行测试实现,并且内含说明文档。 能够很好的理解设计模式之工厂模式。

    简易计算器(简单工厂模式源码)

    采用简单的工厂模式封装计算类,按钮部分事件用代码循环添加,适合初学者看看,其他人士就不用看了,有空指点一下也行

    C++设计模式之工厂方法模式

    之前讲到了C++设计模式——简单工厂模式,由于简单工厂模式的局限性,比如:工厂现在能生产ProductA、ProductB和ProductC三种产品了,此时,需要增加生产ProductD产品;那么,首先是不是需要在产品枚举类型中添加新...

    线程池 + 工厂模式 + 工厂方法 + 单件模式

    线程池、工厂模式、工厂方法、单件模式、内存池的简单实现,代码量1300 行,有测试样例 ~ 发现有BUG请指正, thx

    C++(采用工厂模式)栈实现迷宫完整代码

    首先采用三种方式实现了栈结构,其次采用工厂模式根据子类创建对象,最后实现迷宫。完整已测试。

    OPPO手机常用工程指令

    OPPO手机常用工程指令,部分指令因为版本不同可能无法通用,OPPO R9m实测大部分都是可用的。温馨提示,进入工程目录后不要随意改动参数,否则可能导致不可预期的后果。

    红米k60 代码mondrian 面具一键root资源 持续更新

    红米k60 代码mondrian 面具一键root资源 持续更新 1---手机必须解锁bl后才可以使用此资源 2---资源内一键刷写root脚本。方便操作。你只需要进入fast模式链接电脑运行即可 3---资源带操作步骤说明。 4----资源在网盘...

    编写可靠的javascript代码测试驱动开发javascript商业软

    测试驱动开发JAVAscript商业软件内容简介:《编写可靠的Javascript代码 测试驱动开发Javascript商业软件》分为5个部分:第Ⅰ部分“奠定坚实的基础”涵盖了软件工程的关键概念,例如SOLID和DRY原则...

Global site tag (gtag.js) - Google Analytics