首页 > 代码库 > 设计模式—工厂模式
设计模式—工厂模式
java中的23中设计模式
1. 工厂模式
工厂模式分为三种
(1.)普通工厂模式
普通工厂模式,就是建立一个工厂类,对实现了同一个接口的一些类进行实例的创建。
普通工厂模式关系图
以下举例:(我们举一个发送邮件和短信的例子)
首先,创建二者的共同接口:
[java] view plaincopy
public interface Sender {
public void Send();
}
其次,创建实现类:
[java] view plaincopy
实现类一
public class MailSender implements Sender {
@Override
public void Send() {
System.out.println("this is mailsender!");
}
}
[java] view plaincopy
实现类二
public class SmsSender implements Sender {
@Override
public void Send() {
System.out.println("this is sms sender!");
}
}
最后,建工厂类:
[java] view plaincopy
public class SendFactory {
public Sender produce(String type) {
if ("mail".equals(type)) {
return new MailSender();
} else if ("sms".equals(type)) {
return new SmsSender();
} else {
System.out.println("请输入正确的类型!");
return null;
}
}
}
我们来测试下:
public class FactoryTest {
public static void main(String[] args) {
SendFactory factory = new SendFactory();
Sender sender = factory.produce("sms");
sender.Send();
}
}
输出:this is sms sender!
(2.) 多个工厂模式
多个工厂模式,是对普通工厂方法的改进,在普通工厂模式中,如果字符串传递出错,则不能正
确创建对象,而多个工厂模式是提供多个工厂方法,分别创建对象。
多个工厂模式关系图
多个工厂模式我们只需要将SnedFactory这个类修改就行, 如下:
[java] view plaincopy
多个工厂模式创建如下:
public class SendFactory {
邮件发送工厂者模式
public Sender produceMail(){
return new MailSender();
}
邮件发送方工厂者模式
public Sender produceSms(){
return new SmsSender();
}
}
测试类如下:
[java] view plaincopy
public class FactoryTest {
public static void main(String[] args) {
SendFactory factory = new SendFactory();
Sender sender = factory.produceMail();
sender.Send();
}
}
输出:this is mailsender!
(3.)静态工厂方法模式
静态工厂方法模式,将上面的多个工厂方法模式设置为静态的,不需要创建实例直接调用即可。
静态多个工厂模式我们只需要将SnedFactory这个类修改就行, 如下:
[java] view plaincopy
public class SendFactory {
// 设置为静态
public static Sender produceMail(){
return new MailSender();
}
public static Sender produceSms(){
return new SmsSender();
}
}
[java] view plaincopy
public class FactoryTest {
public static void main(String[] args) {
Sender sender = SendFactory.produceMail();
sender.Send();
}
}
输出:this is mailsender
总体来说,工厂模式适合:凡是出现大量的产品需要创建,并且有共同的接口时,可以通过工厂方法
模式进行创建。在以上的三种模式中,第一种如果传入字符集有误,不能正确创建对象,第三种相对
于第二种,不需要实例化工厂,所以大多数情况下,我们会选择用第三种工厂模式—-静态工厂模式。
设计模式—工厂模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。