JavaSE:普通工厂模式
1. 类图结构
2. 代码
public interface Sender { // 自定义抽象方法,来描述发送的行为 void send(); }
public class MailSender implements Sender { @Override public void send() { print("正在发送邮件..."); } }
public class SmsSender implements Sender { @Override public void send() { print("正在发送短信..."); } }
工厂类:
public class SendFactory { // 自定义成员方法,实现对象的创建 public Sender produce (String type){
// <1> 拓展性和可维护性的体现:
// print("随便加一句打印进行测试..."); if ( "mail".equals(type) ){ return new MailSender(); } if ( "sms".equals(type) ){ return new SmsSender(); } return null; } }
测试类:
public class SendFactoryTest { main() { // 1. 声明工厂类型的引用,指向工厂类类型的对象 SendFactory sf = new SendFactory();
// 2. 调用工厂类中的生产方法,来实现sender对象的创建 Sender sender = sf.produce("mail");
// 存在缺点,比如说:
// Sender sender = sf.produce("mailllllllllllllll");
// sender为空,会发生空指针异常
// (一旦传递的字符串出错,则不能正确创建对象)
// 3. 使用sender对象,调用send()方法,模拟发送数据的行为 sender.send(); // 输出: "正在发送邮件..."
// 这样写的优点:拓展性和可维护性更强, 尤其是创建大量对象的前提下 (见<1>)
================== 等价于 ========================================
Sender sender1 = new MailSender();
sender1.send();
// 这样写的优点: 代码简单,可读性强, 在创建单个对象时有优势
} }