Java设计模式详解:五大创建+七大结构+十一关系模式

需积分: 10 2 下载量 159 浏览量 更新于2024-07-15 收藏 1.66MB PDF 举报
本资源是一份深入讲解Java设计模式的教程,分为四个主要部分:设计模式概述、创建模式、结构模式以及关系模式。课程旨在帮助专业技术人员理解和应用常见的设计模式,提升软件开发的质量和可维护性。 **设计模式概述** 首先,课程介绍了设计模式的分类,包括行为模式(如策略模式、观察者模式等)、创建模式(如工厂方法模式、抽象工厂模式、单例模式、建造者模式和原型模式)、结构模式(如适配器模式、装饰器模式、代理模式、外观模式、桥接模式和组合模式)以及关系模式(涵盖了多种类间关系,如策略模式、模板方法模式、观察者模式等)。设计模式的原则也得到了强调,例如单一职责原则、里氏替换原则、依赖倒转原则、接口隔离原则和最少知道原则等,这些都是编写高质量代码的关键。 **创建模式** 这部分重点讲解了五种创建模式,它们分别是: 1. **工厂方法模式**:提供一个创建对象的接口,让子类决定实例化哪一个类。 2. **抽象工厂模式**:创建一系列相关或相互依赖的对象,而无需指定它们具体的类。 3. **单例模式**:确保一个类只有一个实例,并提供全局访问点。 4. **建造者模式**:将复杂对象的构建过程分解为多个步骤,允许扩展。 5. **原型模式**:提供一个用于创建新对象的原型,同时可以克隆该原型。 **结构模式** 这部分涵盖七种结构模式,这些模式主要用于管理类和对象间的相互依赖关系: - **适配器模式**:使不兼容的接口可以一起工作。 - **装饰器模式**:动态地给对象增加功能,而不会改变其原有结构。 - **代理模式**:为其他对象提供一种代理以控制对这个对象的访问。 - **外观模式**:为复杂的子系统提供简单的接口。 - **桥接模式**:将抽象部分和实现部分解耦,使得它们可以独立变化。 - **组合模式**:使一个类的实例能够替代另一个相同类型的实例。 **关系模式** 这部分涉及11种关系模式,涉及到类之间的各种交互方式: - 父类与子类关系,如策略模式和模板方法模式。 - 类与类之间的关系,包括观察者模式、迭代子模式、责任链模式和命令模式。 - 类的状态变化,备忘录模式和状态模式。 - 通过中间类的交互,如访问者模式、中介者模式和解释器模式。 此外,课程还强调了面向对象编程的核心概念,如继承、封装、多态,以及程序如何由数据结构、算法和对象及它们之间的关系构成。设计模式的应用有助于遵循开闭原则,保证系统的灵活性和扩展性,同时也倡导遵循如单一职责、接口隔离等原则,以维护良好的代码结构和模块化。 这份教程为Java开发者提供了丰富的设计模式实践指导,对于提高软件设计和开发能力具有很高的价值。无论是初学者还是经验丰富的开发者,都能从中受益匪浅。

set hive.exec.dynamic.partition.mode=nonstrict; set hive.exec.parallel=true; set hive.exec.parallel.thread.number=30; --drop table if exists dm_finrisk.dm_event_walletSettleSuccessEvent_di; create table if not exists dm_finrisk.dm_event_cashLoanEvent_di( event_uuid string ,event_code string ,dt string ,event_time string ,rawSnapshot string ) COMMENT 'cashLoanEvent' PARTITIONED BY ( day bigint)stored as parquet; drop table if exists tmp.tmp_dm_event_cashLoanEvent_di_01_${zdt.addDay(-1).format("yyyyMMdd")}; create table if not exists tmp.tmp_dm_event_cashLoanEvent_di_01_${zdt.addDay(-1).format("yyyyMMdd")} as select uuid as event_uuid ,event as event_code ,from_unixtime(unix_timestamp(cast(day as string),'yyyymmdd'),'yyyy-mm-dd') as dt ,from_unixtime(cast(cast(`time` AS BIGINT)/1000 AS BIGINT),'yyyy-MM-dd HH:mm:ss') as event_time ,get_json_object(data,'$.hotPublish.rawSnapshot') as rawSnapshot from dm_finrisk.ods_event_hdfs_snapshot_di where code = 'shield@cashLoanEvent' and day=${zdt.addDay(-1).format("yyyyMMdd")} drop table if exists tmp.tmp_dm_event_cashLoanEvent_di_02_${zdt.addDay(-1).format("yyyyMMdd")}; create table if not exists tmp.tmp_dm_event_cashLoanEvent_di_02_${zdt.addDay(-1).format("yyyyMMdd")} as select event_uuid ,event_code ,dt ,event_time ,rawSnapshot from tmp.tmp_dm_event_cashLoanEvent_di_01_${zdt.addDay(-1).format("yyyyMMdd")}; alter table dm_finrisk.dm_event_cashLoanEvent_di drop if exists partition (day = ${zdt.addDay(-1).format("yyyyMMdd")}); insert overwrite table dm_finrisk.dm_event_cashLoanEvent_di partition (day = ${zdt.addDay(-1).format("yyyyMMdd")}) select event_uuid ,event_code ,dt ,event_time ,rawSnapshot from tmp.tmp_dm_event_cashLoanEvent_di_02_${zdt.addDay(-1).format("yyyyMMdd")}分析下上面代码

2023-06-08 上传