zoukankan      html  css  js  c++  java
  • Quartz.Net系列(三):解读Quartz.Net源码领略设计模式在其中的应用

    1.Builder(建造者)模式

    JobBuilder

     DateBuilder

     其他的Builder(TriggerBuilder、SchedulerBuilder等)

    2.抽象工厂模式

    ISchedulerFactory

    DirectSchedulerFactory StdSchedulerFactory

    IScheduler

    StdScheduler RemoteScheduler[proxy]

    3.IOC模式、可插拔式设计

    //如果你没有自定义的loadHelper,那么就使用SimpleTypeLoadHelper
    loadHelper = ObjectUtils.InstantiateType<ITypeLoadHelper>(typeLoadHelperType ?? typeof(SimpleTypeLoadHelper));

    4.AOP模式[切面编程]

    scheduler.ListenerManager.AddJobListener(new CustomJobListener(),GroupMatcher<JobKey>.AnyGroup());
    public class CustomJobListener : IJobListener
    {
        public string Name => "CustomJobListener";
    
        /// <summary>
        /// 执行否决
        /// </summary>
        /// <param name="context"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public async Task JobExecutionVetoed(IJobExecutionContext context, CancellationToken cancellationToken = default)
        {
            await Task.Factory.StartNew(() =>
            {
                Console.WriteLine("JobExecutionVetoed");
            });
    
        }
        /// <summary>
        /// 待执行
        /// </summary>
        /// <param name="context"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public async Task JobToBeExecuted(IJobExecutionContext context, CancellationToken cancellationToken = default)
        {
            await Task.Factory.StartNew(() =>
            {
                Console.WriteLine("JobToBeExecuted");
            });
        }
    
        /// <summary>
        /// 已执行
        /// </summary>
        /// <param name="context"></param>
        /// <param name="jobException"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public async Task JobWasExecuted(IJobExecutionContext context, JobExecutionException jobException, CancellationToken cancellationToken = default)
        {
            await Task.Factory.StartNew(() =>
            {
                Console.WriteLine("JobWasExecuted");
            });
        }
    }
  • 相关阅读:
    获取字符串最长不重复子串
    斐波那契数列&&上台阶
    mysql 索引
    Python unittest框架实现appium登录
    解决RedisDesktopManager连接不上redis问题
    Nginx配置---启用gzip压缩
    Nginx配置---同一端口下部署不同项目
    Nginx配置---解决History路由报错问题
    个人网站搭建基本流程
    Create-React-App项目中CSS Modules的使用
  • 原文地址:https://www.cnblogs.com/vic-tory/p/13129586.html
Copyright © 2011-2022 走看看