zoukankan      html  css  js  c++  java
  • javaee设计模型简介

    (一)五种模式

    1、单例模式

    在某些情况下,有些对象只需要一个就可以了,即每个类只需要一个实例。例如,一台计算机上的可以连接多台打印机,但是该计算机上的打印程序只能有一个,这里就可以通过单例模式来避免两个打印作业同时输出到打印机中,即在整个的打印过程中只有一个打印程序的实例。

    单例模式(单件模式)的作用就是保证在整个应用程序的生命周期中,任何一个时刻,单例类的实例都只存在一个(当然也可以不存在)。单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例单例模式。单例模式只应在有真正的“单一实例”
    的需求时才可使用。

    2、工厂模式

    工厂模式专门负责实例化有大量公共接口的类。

    优点:工厂模式可以动态地去决定将哪一个类实例化,而不必事先知道每次要实例化哪一个类。客户类和工厂类是分开的。消费者无论什么时候需要某种产品,需要做的只是向工厂提出请求即可。消费者无需修改就可以接纳新产品。

    缺点:当产品修改时,工厂类也要做相应的修改。

    工厂模式包含以下3中形态:

    1)简单工厂(Simple Factory)模式:简单工厂模式的工厂类是根据提供给它的参数,返回的是几个可能产品中的一个类的实例,通常情况下它返回的类都有一个公共的父类和公共的方法。

    2)工厂方法(Factory Method)模式:工厂方法模式是类的创建模式,其用意是定义一个用于创建产品对象的工厂的接口,而将实际创建工作推迟到工厂接口的子类中。它属于简单工厂模式的进一步抽象和推广。多态的使用,使得工厂方法模式保持了简单工厂模式的优点,克服了它的缺点。

    3)抽象工厂(Abstract Factory)模式:抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式是指当有多个抽象角色时使用的一种工厂模式,抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。根据LSP原则(Liskov替换原则),任何接受父类型的地方,都应当能够接受子类型。因此,实际上系统所需要的,仅仅是类型与这些抽象产品的具体子类的实例。工厂类负责创建抽象产品的具体子类的实例。

    3、适配器模式

    概念:适配器模式也被称为变压器模式,它是把一个类的接口转换成客户端所期望的另一种接口,从而使原本因接口不匹配而无法一起工作的两个类能够一起工作。适配器类可以根据所传递的参数返回一个合适的实例给客户端。

    4、享元模式

    享元模式以共享的方式高效地支持大量的细粒度对象。享元模式能做到共享的关键是区分内蕴状态和外蕴状态。将可以共享和不可以共享的状态从常规类中区分开来,将不可以共享的状态从类里剔除出去。客户端不可以直接创建被共享的对象,而应当使用一个工厂对象负责创建被共享的对象。享元模式大幅度地降低内存中对象的数量。

    内蕴状态:存储在享元内部,不会随环境的改变而有所不同。

    外蕴状态:随着环境的改变而改变的,外蕴状态不能影响内蕴状态,他们是相互独立的。

    5、观察者模式

    概念:观察者模式(发布/订阅模式)提供了避免组件之间紧密耦合的另一种方法,它将观察者和被观察者的对象分离开。在该模式中,一个对象通过添加一个方法(该方法允许另一个对象,即观察者注册自己)使本身变得可观察。当可观察的对象更改时,它会将消息发送到已注册的观察者。这些观察者使用该信息执行的操作与可观察的对象无关,结果是对象可以相互对话,而不必了解原因。Java和C#的事件处理机制就是采用的此种设计模式。

    (二)AOP

    一、

    面向代理编程(AOP)是一种编程范式,其中软件的构建以软件代理的概念为中心。与面向对象编程的核心是对象(提供具有可变参数的方法)不同,AOP的核心是外部指定的代理(具有接口和消息传递功能)。它们可以被认为是对象的抽象。交换的消息通过接收“代理”来解释,以特定于其代理类的方式。

    代理模式的主要优点有:

    • 代理模式在客户端与目标对象之间起到一个中介作用和保护目标对象的作用;
    • 代理对象可以扩展目标对象的功能;
    • 代理模式能将客户端与目标对象分离,在一定程度上降低了系统的耦合度;

    其主要缺点是:

    • 在客户端和目标对象之间增加一个代理对象,会造成请求处理速度变慢;
    • 增加了系统的复杂度;

    1、模式的结构

    代理模式的主要角色如下。

    1. 抽象主题(Subject)类:通过接口或抽象类声明真实主题和代理对象实现的业务方法。
    2. 真实主题(Real Subject)类:实现了抽象主题中的具体业务,是代理对象所代表的真实对象,是最终要引用的对象。
    3. 代理(Proxy)类:提供了与真实主题相同的接口,其内部含有对真实主题的引用,它可以访问、控制或扩展真实主题的功能。

    2、代理模式的应用场景

    前面分析了代理模式的结构与特点,现在来分析以下的应用场景。

    • 远程代理,这种方式通常是为了隐藏目标对象存在于不同地址空间的事实,方便客户端访问。例如,用户申请某些网盘空间时,会在用户的文件系统中建立一个虚拟的硬盘,用户访问虚拟硬盘时实际访问的是网盘空间。
    • 虚拟代理,这种方式通常用于要创建的目标对象开销很大时。例如,下载一幅很大的图像需要很长时间,因某种计算比较复杂而短时间无法完成,这时可以先用小比例的虚拟代理替换真实的对象,消除用户对服务器慢的感觉。
    • 安全代理,这种方式通常用于控制不同种类客户对真实对象的访问权限。
    • 智能指引,主要用于调用目标对象时,代理附加一些额外的处理功能。例如,增加计算真实对象的引用次数的功能,这样当该对象没有被引用时,就可以自动释放它。
    • 延迟加载,指为了提高系统的性能,延迟对目标的加载。例如,Hibernate 中就存在属性的延迟加载和关联表的延时加载

    (三)java设计模板template

    模板模式(Template ):

          模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。

    模式中的角色

        抽象类(AbstractClass):实现了模板方法,定义了算法的骨架。
        具体类(ConcreteClass):实现抽象类中的抽象方法,已完成完整的算法。

    模式模式优缺点:

    1.)优点

    模板方法模式通过把不变的行为搬移到超类,去除了子类中的重复代码。子类实现算法的某些细节,有助于算法的扩展。通过一个父类调用子类实现的操作,通过子类扩展增加新的行为,符合“开放-封闭原则”。
     

    2.)缺点

    每个不同的实现都需要定义一个子类,这会导致类的个数的增加,设计更加抽象。
     

    3.)适用场景

    在某些类的算法中,用了相同的方法,造成代码的重复。控制子类扩展,子类必须遵守算法规则。
  • 相关阅读:
    Python 【第十三章】 Django 之 FORM
    Django-Model操作数据库(增删改查、连表结构)参考
    Python 【第十二章】 Django 之 Model 数据库操作
    Python 【第十一章】 Django模版
    Python 【第十章】 Django路由
    Ajax操作如何实现跨域请求 (JSONP和CORS实现Ajax跨域的原理)
    浏览器同源政策概述
    Python 【第九章】 Django基础
    python 2.7下的正则将中文分隔符去掉
    python time应用 之时间戳转换
  • 原文地址:https://www.cnblogs.com/sensenma533/p/10707295.html
Copyright © 2011-2022 走看看