zoukankan      html  css  js  c++  java
  • 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();  

         // 这样写的优点: 代码简单,可读性强, 在创建单个对象时有优势
          
    } }
  • 相关阅读:
    NET 事件与委托
    NET高级 REF OUT
    缓冲池
    NET高级 EQUAL相等
    装箱拆箱
    CTS、CLS、CLR
    结构体及引用类型
    NET高级-深拷贝浅拷贝
    密闭类 静态 类及扩展方法
    NET高级-索引器
  • 原文地址:https://www.cnblogs.com/JasperZhao/p/14954208.html
Copyright © 2011-2022 走看看