• 设计者模式


    1.工厂方法模式(Factory Method Pattern):

    定义一个创建对象的接口,让实现这个接口的类来决定实例化哪个类;工厂方法让类的实例化推迟到子类中进行;

    a.简单工厂模式(Simple Factory Pattern): 由一个工厂对象决定决定创造出哪一种产品类的实例;

    属于创建型模式,但是不属于GOF 23中设计者模式;

    适用场景:工厂类负责创建的对象较少;客户端只需要传入工厂类的参数,无需知道创建对象的逻辑;LoggerFactory,Calendar

    缺点:不易于扩展负责的产品结构;

    b.抽象工厂模式:提供创建一系列相关或者相互依赖对象的接口,无须指定他们具体的类;

    属于创建型设计模式;

    缺点: 类的个数容易过多,增加了代码结构的复杂度;增加了代码的抽象性和理解难度;

    适用场景:应用层不依赖于产品类实例如何被创建,实现等细节;

        强调一系列相关的产品对象(属于同一产品族)一起使用创建对象需要大量重复的代码;

        提供一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于具体实现; 

    应用实例:数据库连接;

    产品族: 一系列的相关的产品,整合到一起有关联性;

    产品等级:同一个继承体系;

    2.单例模式(Singleton Pattern):

    确保一个类在任何情况下都绝对只有一个实例,并提供一个全局访问点;

    隐藏所有的构造方法;

    属于创建型模式;

    应用实例:ServletContext,ServletConfig,ApplicationConfig,DBPool;

    a.饿汉式单例:

    优点:效率高,性能高;

    缺点:使用大量的单例,初始化的时候可能造成内存浪费;

    b.懒汉式单例;(双重判断,if里面synchronized,然后里面if创建实例;可能造成指令重排序,成员变量需要volatitle修饰);

    c.注册式单例;(Map容器式)

    d.ThreadLocal单例;(在同一个线程里面是单例的,应用实例Mybatis里面错误日志输出ErrorContext,保证每个线程异常隔离);

    单例总结:

    a.私有化构造器;

    b.保证线程安全;

    c.延迟加载;(饿汉式)

    d.防止系列化和反序列化破坏单例;(readResolve(){return INSTANCE;})

    e.防止反射攻击单例;(构造器里面抛异常,阻止使用构造器);

    3.原型模式(Prototype Pattern):原型实例制定创建对象的种类,并且通过copy这些实例创建新的对象;

    调用者不需要知道任何细节,不调用构造函数;

    属于创建型模式;

    和单例模式冲突;

    Cloneable都是浅克隆;

    深克隆:a.序列化; b.转Json;

    Java自带的原型模式是基于二进制流的拷贝,比直接new一个对象性能提升很多;

    缺点:必须配备克隆或者copy方法;

    4.建造者模式(Builder Pattern):

    将一个复杂对象的构和它的表示分离,使得同样的构建过程可以创建不同的表示;

    用户只需要指定需要创造的类就可以获得,建造过程和细节不需要了解;

    属于创建型模型;

    Spring中用到的设计者模式:

    工程模式: BeanFactory;

    装饰者模式: BeanWrapper;

    代理模式: AopProxy;

    单例模式: ApplicationContext;

    委派模式: DispatcherServlet;

    策略模式: HandlerMapping;

    适配者模式: HandlerAdapter;

    模板方法模式: JdbcTemplate;

    观察者模式: ContextLoaderListener;

  • 相关阅读:
    java枚举enum
    冒泡排序、选择排序、插入排序、二分法排序、快速排序、二叉树排序、堆排序总结
    Django-tinymce富文本的使用
    Redis-基本操作总结
    git-总结大全
    css-总结
    html-table布局
    html表单示例
    html总结
    python-浅拷贝、深拷贝实例以及讲解
  • 原文地址:https://www.cnblogs.com/xileman/p/14177621.html
Copyright © 2020-2023  润新知