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

         // 这样写的优点: 代码简单,可读性强, 在创建单个对象时有优势
          
    } }
  • 相关阅读:
    cf 1179 C
    P5055 【模板】可持久化文艺平衡树 可持久化fhqtreap
    bzoj4605: 崂山白花蛇草水 权值线段树套KDtree
    luoguP4173 残缺的字符串 FFT
    [HNOI2016]序列 CDQ+DP
    [TJOI2017]不勤劳的图书管理员
    loj2058 「TJOI / HEOI2016」求和 NTT
    bzoj4503: 两个串
    luoguP4721 【模板】分治 FFT
    [Cqoi2016]K远点对 K-Dtree
  • 原文地址:https://www.cnblogs.com/JasperZhao/p/14954208.html
Copyright © 2011-2022 走看看