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

         // 这样写的优点: 代码简单,可读性强, 在创建单个对象时有优势
          
    } }
  • 相关阅读:
    Java NIO学习笔记---I/O与NIO概述
    JAVA多线程和并发基础面试问答
    Java线程面试题 Top 50
    Java并发编程:Timer和TimerTask
    Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
    Java并发编程:线程池的使用
    Java并发编程:阻塞队列
    程序猿写客户端,没有视觉设计师,怎么搞到图?
    hm nsis edit请求的操作需要提升
    MFC修改系统托盘的图标
  • 原文地址:https://www.cnblogs.com/JasperZhao/p/14954208.html
Copyright © 2011-2022 走看看