`
MySSH
  • 浏览: 65122 次
  • 性别: 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
分享到:
评论

相关推荐

    简单工厂模式

    简单工厂模式的核心思想是提供一个工厂类,这个工厂类负责创建一系列相关的对象,而不是让客户端代码直接new这些对象。这样做的好处是,当需要添加新的产品类型时,只需要修改工厂类,而不需要修改使用这些产品的...

    工厂模式测试代码

    工厂模式是一种常用的面向对象设计模式,它提供了一种创建对象的最佳方式。...文件"FactoryMode"可能包含了对这两种模式的测试代码,通过阅读和理解这些代码,我们可以更好地掌握工厂模式和抽象工厂模式的应用。

    工厂模式的测试代码

    以上就是关于工厂模式及其测试代码的基本概念和结构,通过这样的设计,我们可以轻松地添加新的产品类和工厂类,而不会影响到已有的代码。在实际项目中,工厂模式广泛应用于框架设计、插件系统、数据库连接管理等领域...

    工厂模式代码实现_Java

    它主要有三种类型:简单工厂模式、工厂方法模式和抽象工厂模式。 1. **简单工厂模式**:也称为静态工厂方法模式,通常由一个静态方法创建对象。这种方式适用于产品种类较少且不会频繁扩展的情况。例如,在Java中,`...

    用工厂方法模式重构简易计算器 源代码+实验报告

    源代码中,我们可以看到工厂方法模式的结构清晰,代码复用性强。每个具体工厂类只负责生成一种计算操作,使得代码结构更模块化,易于维护。同时,如果未来需要添加新的计算功能,只需创建一个新的工厂类即可,无需...

    android 工厂模式源代码

    这个"android 工厂模式源代码"很可能包含了一个用于全面测试Android设备硬件功能的应用程序APK。接下来,我们将深入探讨Android工厂模式的工作原理、涉及的硬件组件以及源代码中的关键部分。 一、Android工厂模式...

    设计模式_简单工厂模式

    这些代码可以帮助初学者更好地理解如何在实际项目中应用简单工厂模式。通过分析和运行这些源码,你可以深入理解这个设计模式的工作原理,以及如何在C++中有效地使用它。 总结起来,简单工厂模式提供了一种静态方法...

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

    简单工厂模式的优点在于客户端代码不需要直接与具体产品类交互,减少了代码的耦合度,增加了系统的可维护性和可扩展性。 2. **C#语言**:C#是微软开发的一种面向对象的编程语言,广泛应用于Windows平台上的应用程序...

    设计模式之简单工厂模式(附demo)

    1. **灵活性**:虽然简单工厂模式简化了客户端代码,但如果需要添加新的产品类型,就需要修改工厂类,这违背了“开闭原则”——对扩展开放,对修改关闭。因此,当产品种类增加或频繁变化时,简单工厂模式可能不再...

    简单工厂设计模式实现的计算器

    简单工厂设计模式是一种常用的设计模式,它在软件工程中用于创建对象,特别是在需要根据特定条件创建不同类的对象时。在这个实现的计算器项目中,我们利用了简单工厂模式,结合了面向对象编程的三大特性——继承、...

    C++简单工厂模式教学的视频

    - **测试与调试**:可能会进行一些简单的测试,以验证工厂模式的正确性,并分享一些调试技巧。 **深入理解** - **多态性**:在C++中,简单工厂模式通常结合虚函数或模板类来实现多态性,这样工厂类可以根据对象...

    简单工厂模式实例 C++

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

    设计模式系列编程源码----简单工厂模式

    简单工厂模式是软件设计模式中的一种创建型模式,它的主要思想是定义一个工厂类,这个类负责创建对象,客户端通过调用工厂类的特定方法来获取所需的对象,而无需关心对象是如何被创建的。这种模式将对象的创建过程...

    抽象工厂模式--演示代码

    总结来说,"JAVA抽象工厂模式--演示代码"将展示如何在Java中应用这一模式,通过创建和使用抽象工厂,来实现对象族的动态创建,同时保持代码的松耦合和可扩展性。测试用例则会验证这些功能是否按照预期工作。

    代码生成器(工厂模式)

    【代码生成器(工厂模式)】是开发过程中一种高效实用的...通过灵活运用工厂模式,不仅可以简化代码结构,还能够提高代码的可维护性和可测试性。对于开发者来说,掌握这种工具和设计模式的结合是提升开发效率的关键。

    android 工厂模式apk 源代码

    在Android系统中,工厂模式(Factory Mode)是一种特殊的功能,通常用于设备制造和维修过程,以便测试硬件组件和系统功能。这个"android 工厂模式apk 源代码"是针对这种模式的一个实现,让我们深入了解一下它涉及的...

    简单工厂模式和策略模式实现简单排序算法。

    通过简单工厂模式或策略模式,我们可以轻松地切换排序算法,使得代码更加灵活。 总结来说,简单工厂模式适用于在有限的、已知的类型中选择对象,而策略模式则更适用于需要在运行时选择不同算法的情况。两者都可以...

Global site tag (gtag.js) - Google Analytics