首页 > 代码库 > 设计模式—工厂模式

设计模式—工厂模式

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

设计模式—工厂模式