文档详情

Java设计模式(1-8).pptx

发布:2016-12-07约字共57页下载文档
文本预览下载声明
Java之美-设计模式 (Design pattern)-由菜鸟到高手演变什么是设计模式可复用面向对象软件的基础是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性设计模式的分类总体分为三大类:创建型模式,共 5 种:单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式。结构型模式,共 7 种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为型模式,共 11 种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。1、单例模式(Singleton)单例模式有以下特点: 1、单例类只能有一个实例。 2、单例类必须自己创建自己的唯一实例。 3、单例类必须给所有其他对象提供这一实例。主要介绍:懒汉式单例、饿汉式单例。(1)懒汉式单例// 懒汉式单例类.在第一次调用的时候实例化自己public?class?Singleton?{???private?Singleton()?{}???private?static?Singleton?single=null;???// 静态工厂方法?public?static?Singleton?getInstance()?{???if?(single?==?null)?{?single?=?new?Singleton();???}?return?single;???}??}?A、在getInstance方法上加同步public?static?synchronized?Singleton?getInstance()?{???if?(instance?==?null)?{???instance?=?new?Singleton();???}???return?instance;???}??B、双重检查锁定public?static?Singleton?getInstance()?{???if?(instance?==?null)?{???synchronized?(instance)?{???if?(instance?==?null)?{???instance?=?new?Singleton();???}???}???}???return?instance;???}??C、静态内部类public?class?Singleton?{????private?Singleton()?{???}????/*?此处使用一个内部类来维护单例?*/??private?static?class?SingletonFactory?{???private?static?Singleton?instance?=?new?Singleton();???}????public?static?Singleton?getInstance()?{???return?SingletonFactory.instance;???}???}?(2)饿汉式单例// 饿汉式单例类.在类初始化时,已经自行实例化public?class?Singleton1?{???private?Singleton1()?{}???private?static?final?Singleton1?single?=?new?Singleton1();???// 静态工厂方法?public?static?Singleton1?getInstance()?{???return?single;???}??}??单例模式应用场景网站的计数器,一般也是采用单例模式实现,否则难以同步。如:统计在线人数应用程序的日志应用,一般都何用单例模式实现,这一般是由于共享的日志文件一直处于打开状态,因为只能有一个实例去操作,否则内容不好追加。Web应用的配置对象的读取,一般也应用单例模式,这个是由于配置文件是共享的资源。数据库连接池的设计一般也是采用单例模式,因为数据库连接是一种数据库资源。多线程的线程池的设计一般也是采用单例模式,这是由于线程池要方便对池中的线程进行控制。2、工厂方法模式(Factory Method)普通工厂模式多个工厂方法模式静态工厂方法模式(1)简单工厂模式建立一个工厂类,对实现了同一接口的一些类进行实例的创建。关系图:举例:发送邮件和短信的例子public?interface?Sender?{???public?void?Send();??}??public?class?MailSender?implements?Sender?{???@Override???public?void?Send()?{???System.out.println(this?is?mailsender!
显示全部
相似文档