网站首页 > java教程 正文
简单工厂方法模式
就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。下面是他们的类图:
具体代码如下
Sender.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();
}
}
总体来说,工厂模式适合:凡是出现了大量的产品需要创建,并且具有共同的接口时,可以通过工厂方法模式进行创建。在以上的三种模式中,第一种如果传入的字符串有误,不能正确创建对象,第三种相对于第二种,不需要实例化工厂类,所以,大多数情况下,我们会选用第三种——静态工厂方法模式。
猜你喜欢
- 2025-08-06 JavaBean、MVC设计模式与Java中Dao、Service、Controll三层体系
- 2025-08-06 Java中的责任链设计模式,太牛了
- 2025-08-06 Java设计模式之代理模式
- 2025-08-06 Java/Go/Python/JS不同语言实现23种经典设计模式
- 2025-08-06 Java设计模式:程序员的九阳神功,从此代码不再“烂”!
- 2025-08-06 Java 后端开发必看!工厂设计模式轻松拿捏
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)