2.2.4 静态工厂方法模式
(1)类图结构
(2)实际意义
工厂方法模式适合:凡是出现了大量的产品需要创建且具有共同的接口时,可以通过工厂方法模式进行创建。
(3)主要缺点
工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序生产新的产品,就必须对工厂类的代码进行修改,这
就违背了开闭原则。
(4)代码演示
//接口
public interface Sender {
//自定义方法描述发送的行为
void send();
}
//实现接口一
package demo02;
public class MailSender implements Sender{
@Override
public void send() {
System.out.println("正在发送邮件...");
}
}
//实现接口二
package demo02;
public class SmsSender implements Sender{
@Override
public void send() {
System.out.println("正在发送短信...");
}
}
//工厂类
public class SendFactory {
public static Sender produceMail() {
return new MailSender();
}
public static Sender produceSms() {
return new SmsSender();
}
}
//测试类
//测试类
public class SendFactoryTest {
public static void main(String[] args) {
//缺点:代码复杂,可读性差
//优点:扩展性和可维护性好 尤其在创建大量对象的前提下
//1.声明SendFactory类型的引用指向SendFactory类型的对象
// SendFactory sf=new SendFactory();
//2.调用生产方法来实现对象的创建
// Sender sender = sf.produce("mail");
// Sender sender = sf.produce("maill"); 传递的字符串出错会引发空指针异常
// Sender sender=sf.produceMail();
Sender sender=SendFactory.produceMail();
//3.使用对象调用方法模拟发送行为
sender.send(); //正在发送邮件
System.out.println("----------------------------");
//优点:代码简单,可读性好 在创建单个对象时有优势
//缺点:扩展性和可维护性差
Sender sender1=new MailSender();
sender1.send();