设计模式1

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

设计模式DesignPatterns概述导致重新设计的一般原因通过显式指定一个类来创建对象对特殊操作的依赖对硬件和软件平台的依赖对对象表示和实现的依赖对算法的依赖紧耦合通过生成子类来扩充功能不能方便地对类进行修改概述继承、组合、参数化类型类继承与接口继承的比较继承与组合的比较继承与参数化类型的比较原则一:对接口编程,而不是对实现编程原则二:优先使用对象组合,而不是继承概述可复用模式基类、接口可复用框架框架使用者实现类使用继承创建和使用使用概述什么是设计模式设计模式是对被用来在特定场景下解决一般设计问题的类和相互通信的对象的描述。每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动。概述设计模式编目范围目的创建型结构型行为型类FactoryMethodAdapterInterpreterTemplateMethod对象AbstractFactoryBuilderPrototypeSingletonAdapterBridgeCompositeDecoratorFacadeFlyweightProxyChainofResponsibilityCommandIteratorMediatorMementoObserverStateStrategyVisitor创建型模式创建型模式的目的使系统独立于如何创建、组合和表示对象。类创建型模式使用继承改变被实例化的类。对象创建型模式将实例化委托给另一个对象。AbstractFactoryBuilderFactoryMethodPrototypeSingleton什么是单例(Singleton)模式作为对象的创建模式[GOF95],单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。单例模式的三个要点:只能有一个实例;必须自行创建这个实例;它必须自行向整个系统提供这个实例。0.什么是单例(Singleton)模式一个例子:Windows回收站在整个视窗系统中,回收站只能有一个实例,整个系统都使用这个惟一的实例,而且回收站自行提供自己的实例。因此,回收站是单例模式的应用。1.单例模式的结构单例类的简略类图如下所示。单例模式在Java语言的实现上有自己的特别,这些特点往往表现在如何将自己实例化上,大致有以下三种:饿汉式单例类懒汉式单例类2.单例模式的实例化形式饿汉式单例类饿汉式单例类是在Java语言里实现得最为简便的单例类。此类自己将自己实例化.2.单例模式的实例化形式饿汉式单例类代码清单:publicclassEagerSingleton{//加载时就实例化privatestaticfinalEagerSingletonm_instance=newEagerSingleton();//私有的构造方法privateEagerSingleton(){}//静态工厂方法publicstaticEagerSingletongetInstance(){returnm_instance;}}2.单例模式的实例化形式懒汉式单例类与饿汉式单例类相同之处是,类的构造方法是私有的。与饿汉式单例类不同的是,懒汉式单例类在第一次被引用时将自己实例化。如果加载器是静态的,那么在懒汉式单例类被加载时不会将自己实例化。2.单例模式的实例化形式懒汉式单例类代码清单:publicclassLazySingleton{privatestaticLazySingletonm_instance=null;privateLazySingleton(){}//静态工厂方法,在获取实例时才实例化synchronizedpublicstaticLazySingletongetInstance(){if(m_instance==null){m_instance=newLazySingleton();}returnm_instance;}}3.在什么情况下使用单例模式?使用单例模式的条件使用单例模式有一个很重要的必要条件:在一个系统要求一个类只有一个实例时才应当使用单例模式。反过来说,如果一个类可以有几个实例共存,那么就没有必要使用单例类。但是做到上面这一点并不容易,下面就是一些这样的情况。4.在什么情况下使用单例模式?例子一问:我的一个系统需要一些“全程”变量。学习了单例模式后,我发现可以使用一个单例类盛放所有的“全程”变量。请问这样做对吗?答:这样做是违背单例模式的用意的。单例模式只应当在有真正的“单一实例”的需求时才可使用。一个设计得当的系统不应当有所谓的“全程”变量,这些变量应当放到它们所描述的实体所对应的类中去。将这些变量从它们所描述的实体类中抽出来,放到一个不相干的单例类中去,会使得这些变量产生错误的依赖关系和耦合关系。4.在什么情况下使用单例模式?例子二问:我的一个系统需要管理与数据库的连接。学习了单例模式后,我发现可以使用一个单例类包装一个Connection对象,并在finalize()方法中关闭这个Connection对象。这样的话,在这个单例类的实例没有被人引用时,这个finalize()对象就会被调用,因此,Connection对象就会被释放。这多妙啊。答:这样做是不恰当的。除非有单一实例的需求,不然不要使用单例模式。在这里Connection对象可以同时有几个实例共存,不需要是单一实例。单例模式有很多的错误使用案例都与此例子相似,它们都是试图使用单例模式管理共享资源的生命周期,这是不恰当的。

1 / 17
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功