zoukankan      html  css  js  c++  java
  • 设计者模式

    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;

  • 相关阅读:
    CF 142B Tprimes
    CF 231A Team
    poj 2001 Shortest Prefixes ——字典树入门
    hdu 1039 Easier Done Than Said?
    poj 2528 Mayor's posters
    hdu 1061 Rightmost Digit
    poj 2503 Babelfish
    CF271 A. Beautiful Year
    poj 2752
    CF271 B. Prime Matrix
  • 原文地址:https://www.cnblogs.com/xileman/p/14177621.html
Copyright © 2011-2022 走看看