首页 > 编程语言 > 详细

设计模式之JAVA----工厂模式

时间:2014-07-30 14:57:43      阅读:714      评论:0      收藏:0      [点我收藏+]

普通工厂模式

bubuko.com,布布扣

定义:建立一个工厂类,对实现了同一接口的一些类进行实例的创建

1、创建接口

package com.hongshu.factory.ordinary.dao;
/**
 * Description: 发送接口
 * @since
 * @author HongShu
 * @version 1.0.0
 * 2014年7月30日 上午11:14:17
 */
public interface Sender {
	public void send();
}

2、接口实现

package com.hongshu.factory.ordinary.dao;
/**
 * Description:发送接口实现
 * @since
 * @author HongShu
 * @version 1.0.0
 * 2014年7月30日 上午11:16:11
 */
public class MailSender implements Sender {

	@Override
	public void send() {
		System.out.println("mial have successed!");

	}

}

package com.hongshu.factory.ordinary.dao;
/**
 * Description:
 * @since
 * @author HongShu
 * @version 1.0.0
 * 2014年7月30日 上午11:17:09
 */
public class SmsSender implements Sender {

	@Override
	public void send() {
		System.out.println("Sms have successed");

	}

}

3、创建工厂方法

package com.hongshu.factory.ordinary;

import com.hongshu.factory.ordinary.dao.MailSender;
import com.hongshu.factory.ordinary.dao.Sender;
import com.hongshu.factory.ordinary.dao.SmsSender;

/**
 * Description: 普通工厂模式
 * @since
 * @author HongShu
 * @version 1.0.0
 * 2014年7月30日 上午11:12:46
 */
public class OrdinaryFactory {
	public Sender produce(String type){
		if("mail".equalsIgnoreCase(type)) return new MailSender();
		else if("sms".equalsIgnoreCase(type)) return new SmsSender();
		else {
			System.out.println("没有对应的工厂实现类");
			return null;
		}
	}
}

4、测试

package com.hongshu.factory.ordinary;

import com.hongshu.factory.ordinary.dao.Sender;

/**
 * Description:
 * @since
 * @author HongShu
 * @version 1.0.0
 * 2014年7月30日 上午11:21:47
 */
public class Test {
	public static void main(String[] args) {
		OrdinaryFactory factory = new OrdinaryFactory();
		Sender sender = factory.produce("sms");
		sender.send();
		sender = factory.produce("mail");
		sender.send();
	}
}


多个工厂方法模式

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

bubuko.com,布布扣

创建工厂类

package com.hongshu.factory.more;

import com.hongshu.factory.ordinary.dao.MailSender;
import com.hongshu.factory.ordinary.dao.Sender;
import com.hongshu.factory.ordinary.dao.SmsSender;

/**
 * Description:多个工厂方法模式
 * @since
 * @author HongShu
 * @version 1.0.0
 * 2014年7月30日 下午1:38:55
 */
public class MoreFactory {
	public Sender produceMail(){
		return new MailSender();
	}
	public Sender produceSms(){
		return new SmsSender();
	}
}

测试方法省略,如同普通工厂方法


静态工厂方法模式

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


创建工厂类

package com.hongshu.factory.staticf;

import com.hongshu.factory.ordinary.dao.MailSender;
import com.hongshu.factory.ordinary.dao.Sender;
import com.hongshu.factory.ordinary.dao.SmsSender;

/**
 * Description:静态工厂方法
 * @since
 * @author HongShu
 * @version 1.0.0
 * 2014年7月30日 下午1:43:44
 */
public class StaticFactory {
	public static Sender produceMail(){
		return new MailSender();
	}
	public static Sender produceSms(){
		return new SmsSender();
	}
}

测试类如同普通工厂类

总结

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

设计模式之JAVA----工厂模式,布布扣,bubuko.com

设计模式之JAVA----工厂模式

原文:http://blog.csdn.net/wgzhl2008/article/details/38295839

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!