专业的JAVA编程教程与资源

网站首页 > java教程 正文

Java设计模式之工厂方法模式

temp10 2025-08-06 22:59:23 java教程 3 ℃ 0 评论

简单工厂方法模式

就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。下面是他们的类图:

具体代码如下
Sender.java

Java设计模式之工厂方法模式

public interface Sender {
	void send();
}

MailSender.java

public class MailSender implements Sender {
	@Override
	public void send() {
		System.err.println("Mail Sender");
	}
}

EmsSender.java

public class EmsSender implements Sender {
	@Override
	public void send() {
		System.err.println("Ems Sender");
	}
}

SendFactory.java

public class SendFactory {
	public Sender produce(String type) {
		if ("ems".equals(type)) {
			return new EmsSender();
		} else if ("mail".equals(type)) {
			return new MailSender();
		} else {
			System.err.println("请输入正确的类型!");
			return null;
		}
	}
}

FactoryMethodTest.java

public class FactoryMethodTest {
	public static void main(String[] args) {
		simpleFactoryMethod();
	}
	public static void simpleFactoryMethod() {
		SendFactory sendFactory = new SendFactory();
		Sender sender = sendFactory.produce("mail");
		sender.send();
	} 
}

多个工厂方法模式

是对简单工厂方法模式的改进,在简单工厂方法模式中,如果传递的字符串出错,则不能正确创建对象,而对多个工厂方法模式是提供了多个工厂方法,分别创建对象。关系图如下:

Sender接口及其实现不变,下面是MutliSendFactory.java和测试类。

MutliSendFactory.java

public class MutliSendFactory {
	public Sender produceEms() {
		return new EmsSender();
	}
	public Sender produceMail() {
		return new MailSender();
	}
}

FactoryMethodTest.java

public class FactoryMethodTest {
	public static void main(String[] args) {
		mutliFactoryMethod();
	}
	public static void mutliFactoryMethod() {
		MutliSendFactory factory = new MutliSendFactory();
		Sender sender = factory.produceMail();
		sender.send();
	}
}

静态工厂方法模式

将多个工厂方法模式中的方法设置为静态,不需要创建实例,直接调用即可,具体代码如下:
MutliSendFactory.java

public class MutliSendFactory {
	public static Sender produceEms() {
		return new EmsSender();
	}
	public static Sender produceMail() {
		return new MailSender();
	}
}

FactoryMethodTest.java

public class FactoryMethodTest {
	public static void main(String[] args) {
		mutliFactoryMethod();
	}
	public static void mutliFactoryMethod() {
		Sender sender = MutliSendFactory.produceMail();
		sender.send();
	}
}

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

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表