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

     // 这样写的优点: 代码简单,可读性强, 在创建单个对象时有优势
      
} }
原文地址:https://www.cnblogs.com/JasperZhao/p/14954208.html