工厂方法模式分为三种:
- 普通工厂方法模式
- 多个工厂方法模式
- 静态工厂方法模式
工厂模式适合:凡是出现了大量的产品需要创建,并且具有共同的接口时,
可以通过工厂方法模式进行创建。在以上的三种模式中,
普通工厂如果传入的字符串有误,不能正确创建对象,
静态工厂相对于多个工厂,不需要实例化工厂类,
所以,大多数情况下,我们会选静态工厂方法模式。
1. 创建一个共同的接口
public interface ISender {
void send(); //发送方法
}
2. 创建多个实现类实现这个接口
发送QQ消息的实现类1
public class QQSender implements ISender{
@Override
public void send() {
System.out.println("QQSender send");
}
}
发送短信的实现类2
public class SmsSender implements ISender{
@Override
public void send() {
System.out.println("SmsSender send");
}
}
3. 普通工程实现方式
public class CommonFactory {
public ISender produce(String type){
ISender sender;
switch (type){
case "sms":
sender = new SmsSender();
break;
case "qq":
sender = new QQSender();
break;
default:
sender = null;
System.out.println("produce 类型匹配");
break;
}
return sender;
}
}
4. 多个工厂实现方式
public class MultiFactory {
public ISender produceSms(){
return new SmsSender();
}
public ISender produceQQ(){
return new QQSender();
}
}
5. 静态工程实现
public class StaticFactory {
public static ISender produceSms(){
return new SmsSender();
}
public static ISender produceQQ(){
return new QQSender();
}
}
6. 测试类
public class FactoryTest {
/**普通工厂**/
@Test
public void test1(){
CommonFactory factory = new CommonFactory();
ISender sender = factory.produce("ww");
if(sender!=null)
sender.send();
}
/**多个工厂**/
@Test
public void test2(){
MultiFactory factory = new MultiFactory();
ISender sender = factory.produceQQ();
sender.send();
}
/**静态工厂**/
@Test
public void test3(){
StaticFactory.produceQQ().send();
}
}