常见的java设计模式详解(附工程代码)

上传人:lx****y 文档编号:243354686 上传时间:2024-09-21 格式:PPTX 页数:27 大小:1.10MB
返回 下载 相关 举报
常见的java设计模式详解(附工程代码)_第1页
第1页 / 共27页
常见的java设计模式详解(附工程代码)_第2页
第2页 / 共27页
常见的java设计模式详解(附工程代码)_第3页
第3页 / 共27页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,开 源 改 变 人 生,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,2011,年,3,月,Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,#,Java,设计模式,常见的设计模式,创建型设计模式,结构型设计模式,行为型设计模式,2,创建型设计模式,之 单例模式,概念,:,只能创建一个类实例的构建对象的方式。,步骤,:,1,),.,私有化熟性。,2,),.,私有化构造方法。,3,),.,提供一个返回该类对象的静态方法。,方式,:懒汉模式和饿汉模式,提高单例模式的性能和安全问题,3,public class SingletonHangry ,/1.,私有化静态熟悉,使得在类加载器在加载该类的时候,这个变量就被实例化,private static SingletonHangry,singleTon = new SingletonHangry();,/2.,私有化构造方法,是指对外透明,外界就不能通过,new,关键字创建新对象并为该类的变量赋值,private SingletonHangry(),/3.,提供一个静态方法,为外界调用,以返回一个该类的实例。,public static SingletonHangry getInstence(),return,singleTon;,4,懒汉模式本质就是延迟加载,但是有线程不同步的缺陷,饿汉模式线程安全但是性能较低,线程加锁,,if(,singleTon = null),synchronized (Singleton.class) ,singleTon = new Singleton();,双重加锁,if(,singleTon = null),synchronized (Singleton.class) ,if(singleTon = null),singleTon = new Singleton();,使用最简单最快速最安全的方式,private final static SingletonFinal SINGLETON = new SingletonFinal();,5,创建型设计模式,之 工厂方法模式,概念,:,定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中去完成。,具体意义,:,核心工厂类不再负责产品的创建,而是成为一个抽象工厂角色,它仅负责具体工厂子类必须实现的接口。这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。,角色,:,抽象工厂,(Creator),角色,:是工厂方法模式的核心,与应用程序无关。任何在模式中创建的对象的工厂类必须实现这个接口。,具体工厂,(Concrete Creator),角色:,这是实现抽象工厂接口的具体工厂类,包含与应用程序密切相关的逻辑,并且受到应用程序调用以创建产品对象。,抽象产品,(Product),角色,:工厂方法模式所创建的对象的超类型,也就是产品对象的共同父类或共同拥有的接口。,具体产品,(,Concrete Product),角色,:,这个角色实现了抽象产品角色所定义的接口。,6,创建型设计模式,之 工厂方法模式,类图,7,创建型设计模式,之 简单工厂模式,感念,:简单工厂模式是由,一个工厂对象,决定创建出哪,一种产品,类的实例。,本质,:,一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。,角色,:,工厂(Creator)角色,:,简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类可以被直接调用,创建所需的产品对象。,抽象产品(,Product),角色:,简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。,具体产品(,Concrete Product),角色:,是简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。,缺点,:由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则,将全部创建逻辑集中到了一个工厂类中;它所能创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类了。,8,创建型设计模式,之 简单工厂模式,工厂方法模式比简单工厂优越,因为他遵循了软件设计的高内聚,模块化责任分配的原则。工厂类不需要改变,如果需要一个新的产品,只需要放入新产品的“原料”(也就是增加一个抽象类的具体实现类,并切增加一个生成该类的工厂),然后就能从具体工厂总拿出新产品,使得软件有很好的可扩充性。,对于简单工厂,如果要新曾一个产品,就要修改工厂类。,9,创建型设计模式,之 抽象 工厂模式,概念和意义:,抽象工厂是对工厂方法的再次抽象,将对产品的创建升级成对产品类型的创建,那么我们就可以从该模式中获取某一类型的产品,然后从该类型的产品中获取该类型的具体产品,从而实现产品创建的高度抽象。这么以来,我们能从工厂中获取的产品的范围更广。,角色:,抽象工厂:负责产品族的声明,这些产品族由其实现类实现。,抽象产品:目标产品族,由具体工厂实现其要返回的子类的具体类型以此实现产品族的派生功能。,具体工厂:分类实现抽象工厂中声明的产品族产品,一个具体的工厂只生产某个产品族的一个子类型的产品,具体产品:产品的最终目标。由具体工厂以抽象工厂中声明的产品族决定其产品类型。,优点:。意义就是优点。,10,创建型设计模式,之 抽象 工厂模式,类图,11,结构型设计模式,之 门面模式,概念,:为所有的子系统提供一个统一对外的接口,外界只需要和这个借口交互,就可以访问到所有子系统的数据和方法。,意义,:统一接口。使用户对一个内部逻辑比较复杂的子系统有一个简单的使用操作,这个门面就充当一个缺省视图角色,子系统的具体流程被封装起来,使用者不需知道,只和门面交互即可。,12,结构型设计模式,之 适配器模式,概念:,将一个类的接口转换成客户希望的另外一个接口。,意义,:通过转换接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。做法是将类自己的接口包裹在一个已存在的类中。,适配器模式的两种情况:,对象适配器模式,,,类适配器模式,对象适配器模式,适配器容纳一个它包裹的类的实例。在这种情况下,适配器调用被包裹对象的物理实体。,类适配器模式,这种适配器模式下,适配器继承自已实现的类。它适用于当客户在接口中定义了他期望的行为时,我们就可以应用适配器模式,提供一个实现该接口的类,并且扩展已有的类,通过创建子类来实现适配。,13,结构,型设计模式,之 适配器模式,角色,Target,:目标抽象类,它定义了客户要使用的特定的接口。,Adapter,:适配器类,将原角色改装成为目标接口后的对象。,Adaptee,:适配者类,需要转换的已有的接口。,使用场景,当客户端需要一个,Target,类型的对象作为输入时,其待满足的业务逻辑在,Adaptee,中,但是客户端又不支持,Adaptee,类型的输入,那么就可以引入一个实现了,Target,接口同时又继承了,Adaptee,类的,Adapter,类,用该类的对象做输入,一举两得。,对象适配器和类适配器比较,由于,java,是单继承语言,如果客户端需要输入的对象是要包含多个待适配类的业务逻辑的,那类适配器的局限性就凸显出来了。所以,对象适配器是类适配器的改进。通过类之间的组合关系,在适配器类中引入多个需要适配的类的引用即可。,14,结构,型设计模式,之 适配器模式,类图,15,行为型设计模式,之 策略模式,概念和意义,传统编程中,当遇到不同情况需要进入同等级但是内容不同的业务逻辑时,需要用到,if . else,等分支来判断。策略模式的好处在于,将这些同等级但是不同内容的业务逻辑分别封装在独立的类中,与系统隔离,进行独立维护。,角色,抽象策略角色: 策略类,通常由一个接口或者抽象类实现。,具体策略角色:包装了相关的算法和行为。,环境角色:持有一个策略类的引用,最终给客户端调用。,用法,将公共方法抽象到顶层策略接口当中,具体在其策略实现类中实现。然后在环境类中保留顶层策略的引用,只要在客户端实现了环境类,那么就可以通过这个引用访问到具体的策略实现类。,16,行为型设计模式,之 策略模式,优点,提供了一种替代继承的方法,而且既保持了继承的优点,(,代码重用,),还比继承更灵活,(,算法独立(独立于环境类中),可以任意扩展,),。,避免程序中使用多重条件转移语句,取代,if,,使系统更灵活,并易于扩展和维护。,遵守大部分,GRASP,原则和常用设计原则,高内聚、低偶合。(关于,GRASP,原则,请参考),缺点,因为每个具体策略类都会产生一个新类,所以会增加系统需要维护的类的数量,17,行为型设计模式,之 策略模式,类图,18,结构型设计模式,之 桥接模式,概念和意义,在一个软件系统的抽象化和实现化之间使用组合,/,聚合关系而不是继承关系,从而使两者可以相对独立地变化的设计模式。桥接模式最终实现的目标是系统中类与类直接解耦,以达到开放自如的设计风格。,关键点,:抽象化、实现化、以组合和聚合取代继承来达到解耦的目的(最终目的就是解耦),图解,19,结构型设计模式,之 桥接模式,根据飞机的用途将其分为空运和货运,于是根据用途抽象出一个飞机类。根据根据的制造商分为空客和播音,于是根据制造商抽象出一个制造商类。这两种抽象就是桥接模式的抽象化。,飞机的实现类中有客机和货机,制造商中有空空和播音,这个返回的结果就实现了桥接模式的实现化。,通过组合模式在获取飞机子类的同时又拿到了制造商的引用,反之,在制造商中保留飞机类的引用可以达到同样的效果。,通过抽象化和实现化,就把一个系统的不同模块独立开来但又相互关联,实现高内聚,低耦合的设计风格。,20,结构型设计模式,之 桥接模式,类图,21,结构型设计模式,之 装饰模式,概念,装饰模式是在不必改变原类文件和使用继承的情况下,,动态,的扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。,角色,抽象构件(,Component,)角色,:给出一个抽象接口,以规范准备接收附加责任的对象和抽象装饰器。,具体构件(,ConcreteComponent,)角色,:定义一个将要接收附加责任的类。,抽象装饰(,Decorator,)角色,:持有一个构件(,Component,)对象的实例,以用来对它进行装饰,并定义一个与抽象构件接口一致的接口。,具体装饰(,Concrete Decorator,)角色,:负责给构件对象,加上,附加的功能。,22,结构型设计模式,之 装饰模式,装饰模式与类继承的区别,1),装饰模式是一种动态行为,对已经存在类进行随意组合,而类的继承是一种静态的行为,一个类定义成什么样的,该类的对象便具有什么样的功能,无法动态的改变。,2),装饰模式扩展的是对象的功能,不需要增加类的数量,而类继承扩展是类的功能,在继承的关系中,如果我们想增加一个对象的功能,我们只能通过继承关系,在子类中增加两个方法。,3),装饰模式是在不改变原类文件和使用继承的情况下,动态的扩展一个对象的功能,它是通过创建一个包装对象,也就是装饰来包裹真是的对象。,装饰模式把对客户端的调用委派给被装饰的类,装饰模式的关键在于这种扩展完全透明的。,23,结构型设计模式,之 装饰模式,关键,装饰对象和真实对象有相同的接口,这样客户端就可以像真实对象那样操作他,而此时装饰对象又持有一个真实对象的引用,当客户端请求时,装饰对象都会把请求交给真实对象处理,而是在转发请求的前后额外地加一些自己的操作。,24,结构型设计模式,之 装饰模式,类图,25,行为型设计模式 之 模版方法模式,概念和意义,抽象出所有子类的公共部分,统一实现,将不同部分留出接口,供不同子类分别实现,从而达到代码复用的设计模式。换句话说就是实现模版类中业务逻辑已知的部分,抽象未知的部分,供子类去实现。,步骤,抽象出子类的公用部分,将其在模版类中实现。,留出子类的待实现接口。,注意,模板方法模式中,抽象类的模板方法应该声明为,final,的。因为子类不能覆写一个被定义为,final,的方法。从而保证了子类的逻辑永远由父类所控制。,26,行为型设计模式 之 模版方法模式,类图,27,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 大学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!