Java 23种设计模式之工厂方法模式

时间:2022-10-02 11:30:40

工厂方法模式分为三种:

  1. 普通工厂方法模式
  2. 多个工厂方法模式
  3. 静态工厂方法模式
工厂模式适合:凡是出现了大量的产品需要创建,并且具有共同的接口时,
可以通过工厂方法模式进行创建。在以上的三种模式中,
普通工厂如果传入的字符串有误,不能正确创建对象,
静态工厂相对于多个工厂,不需要实例化工厂类,
所以,大多数情况下,我们会选静态工厂方法模式。

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();
}
}