java几种常用设计模式.docx
《java几种常用设计模式.docx》由会员分享,可在线阅读,更多相关《java几种常用设计模式.docx(16页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、java几种常用设计模式简单例如 模式概述设计模式可确保通过熟知与公认的解决方案解决常见问题。模式存在的事实根底在 于:大多数问题,可能已经有其他个人或开发小组解决过了。因此,模式提供了一种在开发人员与组织之间共享可使用解决方案的形式。无论这些模式的出处是什 么,这些模式都利用了大家所积累的知识与经历。这可确保更快地开发正确的代码,并降低在设计或实现中出现错误的可能性。此外,设计模式在工程小组成员之间 提供了通用的术语。参加过大型开发工程的人员都知道,使用一组共同的设计术语与准那么对成功完成工程来说是至关重要的。最重要的是,如果能正确地使用,设计 模式可以节省您大量的时间。要想在设计中正确地运
2、用一个设计模式,需要考虑以下条件:1. 弄清你的问题的本质;2. 了解这个模式;3. 理解这个模式如何解决你的问题。所谓单例设计模式简单说就是无论程序如何运行,采用单例设计模式的类Singleton类永远只会有一个实例化对象产生。Singleton是一种创立型模式,指某个类采用Singleton模式,那么在这个类被创立后,只可能产生一个实例供外部访问,并且提供一个全局的访问点特点:1、 无论程序如何运行,该类Singleton类永远只会有一个实例化对象产生2、 在这个类被创立后,只可能产生一个实例供外部访问,并且提供一个全局的访问点具体实现步骤如下:(1) 将采用单例设计模式的类的构造方法私有
3、化用private修饰。(2) 在该类的内部产生该类的实例化对象,并将其封装成private static类型。 (3) 定义一个静态方法获取该类的实例。代码例如:饿汉式: * 单例模式之饿汉式:-线程平安,效率低 * 特点:在类加载时就已经创立好对象 * author Darren Hopublic class Singleton / 将构造方法封装为私有化 ,指明仅在类内部使用private Singleton () / 在内部产生本类的实例化对象,将其封装成private static类型Private static final Singleton instance = new Sing
4、leton();/通过静态方法获取instance对象 public static Singleton getInstance() return instance;懒汉式: * 单利模式值懒汉式: 线程不平安,要运用同步锁 * author Darren Hopublic class SingletonLazy private SingletonLazy() private static SingletonLazy instance;public static SingletonLazy getInstance() if (instance = null) synchronized (Sing
5、letonLazy.class) if (instance = null)instance = new SingletonLazy();return instance;程序在接口与子类之间参加了一个过渡端工厂类,通过此过渡端可以动态取得实现了共同接口的子类实例化对象。 一个对象相关的职责通常有三类:对象本身所具有的职责、创立对象的职责与使用对象的职责。对象本身的职责:就是对象自身所具有的一些数据与方法,可通过一些公开的方法来实现它的职责。对象的创立职责与使用职责(开发中要将两者分开,不能耦合在一个对象中,减少代码的维护工作) - - - -工厂模式的优点在所有的工厂模式中,我们都强调一点:两个
6、类A与B之间的关系应该仅仅是A创立B或是A使用B,而不能两种关系都有。在Java语言中,我们通常有以下几种创立对象的方式: (1)使用new关键字直接创立对象; (2)通过反射机制创立对象; (3)通过clone()方法创立对象; (4)通过工厂类创立对象。工厂模式优点:1. 将对象的创立与使用别离,也使得系统更加符合“单一职责原那么,也有利于开闭原那么,即有利于对功能的复用与系统的维护。2. 将对象的创立与使用别离还有一个好处:防止用来实例化一个类的数据与代码在多个类中到处都是,可以将有关创立的代码搬移到一个工厂类中。3. 可以引入工厂类来封装对象的创立逻辑与客户代码的实例化/配置选项。缺点
7、:工厂没有可以提供实例的逻辑,必须修改源代码3.代理设计模式指由一个代理类来操作被代理类,被代理类执行具体的业务操作,而代理类负责其他相关业务的处理。比方生活中的通过代理访问网络,客户通过网络代理连接网络具体业务,由代理效劳器完成用户权限与访问限制等与上网相关的其他操作相关业务。静态代理模式:静态代理模式实现步骤:1创立一个接口2创立一个委托类/被代理类,该类实现以上的接口3创立一个代理类,该代理类也实现以上接口重写此方法 并且声明一接口类型的引用变量,然后在代理类的构造器中初始化4在应用时:1. 先创立委托类2. 再创立代理类并将委托类的对象传入代理类的构造器中;3. 最后调用代理类实现了接
8、口的方法动态代理模式:动态代理类特点: 动态代理类的源码是在程序运行期间由JVM根据反射等机制动态的生成,所以不存在代理类的字节码文件,无需程序员手工编写它的源代码。即-动态生成代理类。 动态代理类与委托类的关系是在程序运行时确定。 动态代理可以让系统能够根据实际需要来动态创立代理类,让同一个代理类能够代理多个不同的委托类而且可以代理不同的方法。动态代理类不仅简化了编程工作,而且提高了软件系统的可扩展性,因为Java 反射机制可以生成任意类型的动态代理类。动态代理实现步骤:1.通过实现InvocationHandler接口创立自己的调用处理器;2.通过为Proxy类指定ClassLoader对
9、象与一组interface来创立动态代理类; 3.通过反射机制获得动态代理类的构造函数,其唯一参数类型是调用处理器接口类型;-Proxy.newInstance()4.通过构造函数创立动态代理类实例,构造时调用处理器对象作为参数被传入。注意:Java语言实现动态代理时需要用到位于包中的一些类: Proxy类与InvocationHandler 接口提供了生成动态代理类的能力。Proxy类主要用来获取动态代理对象,InvocationHandler接口用来约束调用者实现 (1) Proxy类 Proxy类提供了用于创立动态代理类与实例对象的方法,它是所创立的动态代理类的父类,它最常用的方法如下:
10、1. public static Class getProxyClass(ClassLoader loader,Class. interfaces):该方法用于返回一个Class类型的代理类,在参数中需要提供类加载器并需要指定代理的接口数组2. public static ObjectnewProxyInstance(ClassLoader loader, Classinterfaces, InvocationHandler h): 该方法用于返回一个动态创立的代理类的实例该方法返回实现了被代理类所实现的所有接口的Object对象,即动态代理,需要强制转型特点: 参数loader表示代理类的类
11、加载器 - - - 指定代理对象由哪一个类加载器负责加载 参数interfaces表示代理类所要实现的接口列表,这些接口被代理类已实现 - -指明代理对象的类型-委托类.getInterfaces()获取 参数h表示所指派的调用处理程序类- - - - 代理类与处理类相关联当一个代理实例中的业务方法被调用时将自动调用处理类中的invoke方法。handler : 调用处理器的对象,用于真正调用处理程序-当调用代理对象中的方法时,转调处理器的对象的invoke方法 (2) InvocationHandler接口 InvocationHandler接口是代理处理程序类的实现接口,该接口作为代理实例
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 常用 设计 模式
限制150内