本文系个人的笔记,是总结大神的讲解,不是本人原创,重要的事情说三遍。
1、工厂方法模式(Factory Method)
工厂方法模式分为三种:
1.1、普通工厂模式
就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。简单理解就是将必须用到的方法做成接口,然后需要实现方法的类都去实现这一个接口,通过一个factory的大工厂类对外交互,所有需要使用这些实现接口的类的时候只需要new一个工厂,然后通过工厂类去实例化内部的方法。好处是当需要拓展的时候只需要增加需要的类,然后直接给工厂中加入实例化的方法,使用的时候直接通过工厂去调用。相关代码:
public interface Sender { //上面是共用接口
void Send();
}
public class SendMail implements Sender { //发邮件的服务
@Override
public void Send() {
// TODO Auto-generated method stub
System.out.println("发送邮件");
}
}
public class SendMessage implements Sender { //发送短信的接口
@Override
public void Send() {
// TODO Auto-generated method stub
System.out.println("发送短信");
}
}
public class Factory { //工厂类,用于管理所有实现了接口的类
public Sender produce(String sendType) {
if(sendType.equals("SMS")) {
return new SendMessage();
}else if(sendType.equals("Mail")) {
return new SendMail();
}else {
System.out.println("选择失败");
return null;
}
}
}
public class TestNormalFactory { //测试
public static void main(String[] args) {
// TODO Auto-generated method stub
Factory factory = new Factory();
Sender sender = factory.produce("SMS");
sender.Send();
}
}
输出结果:发送短信
1.2、多个工厂模式
这个工厂模式就不做过多的解释了,就是普通工厂模式中在创建工厂的时候在工厂类中为每一个需要调用的类写一个工厂方法,使用的时候实例化工厂然后调用相应的方法。具体代码贴一下。
public class SendFactory {
public Sender produceMail(){
return new MailSender();
}
public Sender produceSms(){
return new SmsSender();
}
}
1.3、 静态工厂方法模式
将上面的多个工厂方法模式里的方法置为静态的,不需要创建实例,直接调用即可。
public class SendFactory {
public static Sender produceMail(){
return new MailSender();
}
public static Sender produceSms(){
return new SmsSender();
}
}
public class FactoryTest {
public static void main(String[] args) {
Sender sender = SendFactory.produceMail();
sender.Send();
}
}