`

Java设计模式菜鸟系列(四)工厂方法模式建模与实现

 
阅读更多

转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39760895

 

工厂方法模式(Factory Method

工厂方法:顾名思义,就是调用工厂里的方法来生产对象(产品)的。
工厂方法实现方式有3种:

一、普通工厂模式。就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。

1、uml建模图:

2、代码实现

 

/**
 * 示例(一):普通工厂方法
 * 
 * 缺点:如果传递的字符串出错,则不能正确创建对象
 */
interface Sender {
	public void send();
}

class EmailSender implements Sender {

	@Override
	public void send() {
		System.out.println("使用电子邮箱发送...");
	}

}

class SmsSender implements Sender {

	@Override
	public void send() {
		System.out.println("使用短信发送...");
	}

}

/**
 * 产品工厂
 */
class SendFactory {
	public Sender produceSender(String type) {
		if ("email".equals(type)) {
			return new EmailSender();
		} else if ("sms".equals(type)) {
			return new SmsSender();
		} else {
			System.out.println("没有这种类型...");
			return null;
		}

	}
}

/**
 * 客户端测试类
 * 
 * @author Leo
 */
public class Test {
	public static void main(String[] args) {
		// 创建工厂
		SendFactory sendFactory = new SendFactory();
		// 生产产品
		Sender sender = sendFactory.produceSender("email");
		// 发货
		sender.send();
	}

}

 

 

二、多个工厂方法模式是对普通工厂方法模式的改进,在普通工厂方法模式中,如果传递的字符串出错,则不能正确创建对象,而多个工厂方法模式是提供多个工厂方法,分别创建对象。

1、uml建模图:

2、代码实现

/**
 * 示例(二):多个工厂方法
 * 
 * 优点:多个工厂方法模式是提供多个工厂方法,分别创建对象
 */
interface Sender {
	public void send();
}

class EmailSender implements Sender {

	@Override
	public void send() {
		System.out.println("使用电子邮箱发送...");
	}

}

class SmsSender implements Sender {

	@Override
	public void send() {
		System.out.println("使用短信发送...");
	}

}

/**
 * 不同方法分别生产相应的产品
 */
class SendFactory {
	public Sender produceEmail() {
		return new EmailSender();
	}

	public Sender produceSms() {
		return new SmsSender();
	}
}

/**
 * 客户端测试类
 * 
 * @author Leo
 */
public class Test {
	public static void main(String[] args) {
		// 创建工厂
		SendFactory sendFactory = new SendFactory();
		// 生产产品
		Sender senderEmail = sendFactory.produceEmail();
		// 发货
		senderEmail.send();
	}

}

 

三、静态工厂方法模式将上面的多个工厂方法模式里的方法置为静态的,不需要创建实例,直接调用即可。

 

1、uml建模图:

2、代码实现

 

/**
 * 示例(三):静态工厂方法
 * 
 * 优点:多个工厂方法模式是提供多个工厂方法,分别创建对象
 */
interface Sender {
	public void send();
}

class EmailSender implements Sender {

	@Override
	public void send() {
		System.out.println("使用电子邮箱发送...");
	}

}

class SmsSender implements Sender {

	@Override
	public void send() {
		System.out.println("使用短信发送...");
	}

}

/**
 * 静态工厂:不同实例化工厂
 * 
 * 不同方法分别生产相应的产品
 */
class SendFactory {
	public static Sender produceEmail() {
		return new EmailSender();
	}

	public static Sender produceSms() {
		return new SmsSender();
	}
}

/**
 * 客户端测试类
 * 
 * @author Leo
 */
public class Test {
	public static void main(String[] args) {
		// 直接生产产品
		Sender senderEmail = SendFactory.produceEmail();
		// 发货
		senderEmail.send();
	}

}

 

四、总结

 

 

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

 

 

分享到:
评论

相关推荐

    vue+springboot基于Java Web的校园菜鸟驿站管理系统_99y82毕业设计源码.zip

    本系统基于B/S结构模式,采用idea开发环境,建模工具Visio,以及关系型数据库MySQL。 系统采用前后端分离框架vue进行开发。前端开发负责页面的编写及数据的渲染。后端开发负责提供API(接口)。采用了MVC(Model-...

    毕业设计,基于用户行为的社交网络推荐算法研究与实现.zip

    总的来说,这个毕业设计项目涵盖了社交网络分析、用户行为建模、推荐系统设计与实现等多个核心IT领域,旨在通过算法提升社交网络的信息推送效果,为用户提供更个性化的体验。通过深入研究和实践这些知识点,学生不仅...

    本科毕业设计.zip

    这涉及到面向对象设计原则(如单一职责、开闭原则等)和设计模式(如工厂模式、观察者模式等)的应用。 3. **编程实现**:根据设计文档编写代码,这可能涉及到Java、Python、C++等编程语言,以及数据库管理(SQL)...

    许孟2014本科毕业设计.zip

    2. **系统设计**:在需求明确后,许孟会进行系统架构设计,包括模块划分、接口定义等,这部分可能涉及到软件工程中的设计模式,比如工厂模式、单例模式等,以及UML(统一建模语言)工具的使用,如用例图、类图、序列...

    jx的比赛库.zip

    常见的设计模式如工厂模式、单例模式、观察者模式等可能会在代码中出现,以提高代码的可读性和可维护性。 8. **文档与注释**:良好的源码会有详细的注释,解释代码的功能、工作原理和使用方法。这有助于其他参赛者...

    仙林软件奇侠传——EL比赛.zip

    在软件开发中,设计模式是一种通用解决方案,比如单例模式、工厂模式、观察者模式等。参赛者可能会在项目中应用这些模式,提高代码可读性和可维护性。 ### 5. 软件工程原则 项目可能遵循软件工程的最佳实践,如模块...

    基于JSP+MVC+MySQL+Apache Tomcat的学生管理系统.zip

    2. **Model-View-Controller(MVC)模式**:这是一种软件设计模式,用于分离应用程序的数据模型、用户界面和控制逻辑。在学生管理系统中,Model层负责数据处理和业务规则,View层呈现用户界面,Controller层接收用户...

    本科毕业设计使用程序终版.zip

    3. **编程实现**:选择合适的编程语言(如Java、C++、Python等)和开发框架(如Spring Boot、Django、Flask等),将设计转化为代码。在此阶段,学习和应用面向对象编程、异常处理、数据结构与算法等知识至关重要。 ...

    基于威胁情报基础库的关联关系可视化,本科毕业设计和答辩PPT,优秀毕设.zip

    这种方法有助于发现潜在的攻击模式,识别威胁源,并追踪恶意活动的传播路径。在实际应用中,这通常涉及到大数据分析、图数据库和可视化技术的结合。 本科毕业设计中,学生可能需要完成以下任务: 1. 威胁情报收集...

    Kesci比赛练习.zip

    - **设计模式**:单例模式、工厂模式、装饰器模式等,用于提高代码的可读性和可维护性。 - **网络编程**:如果项目涉及网络交互,可能会用到HTTP请求、WebSocket通信等。 - **数据库操作**:如SQL查询、事务处理、...

    毕设&课程作业_智能校园课调系统.zip

    【压缩包子文件的文件名称列表】"Graduation Design"可能包含了一系列与毕业设计相关的文件,如需求文档、设计文档、源代码文件夹、数据库脚本、测试报告、用户手册等。这些文件共同构成了项目开发的全貌,对于学习...

    基于springboot+微信小程序的疫苗预约接种系统.zip

    通过结合SpringBoot框架与微信小程序的技术,实现了用户友好的交互界面和高效的数据管理。下面将详细阐述该项目的核心知识点。 一、SpringBoot框架 SpringBoot是Spring框架的扩展,它简化了Spring应用程序的初始...

    J2EE软件工程师全部培训课程总结

    - **模式**:解决常见问题的设计模式。 #### CVS - **CVS介绍**:CVS是一个版本控制系统。 - **匿名语句块**:在PL/SQL中定义的一段代码。 - **record对象**:用于存储一组相关字段的数据结构。 - **分支结构**:...

    sqldeveloper免安装版

    9. **数据模型er**:内置的数据建模工具可以帮助你设计复杂的实体关系模型,便于理解和改进数据库结构。 10. **作业调度**:你可以安排定期运行的任务,如备份、清理、数据加载等,实现自动化维护。 SQL Developer...

    毕设&课程作业_智能 BI 系统.zip

    9. **编程语言与工具**:常见的BI开发工具包括Tableau、Power BI、QlikView、MicroStrategy等,而编程语言如Python、Java、SQL也是必备技能。 10. **学习资源**:学习BI系统设计,学生可参考相关教材、在线教程,...

Global site tag (gtag.js) - Google Analytics