美文网首页
设计模式知识点--持续更新

设计模式知识点--持续更新

作者: 没睡醒的鱼 | 来源:发表于2018-04-12 18:02 被阅读4次

    首先来介绍一下两个被问的最多的设计模式

    1.工厂方法模式:

    凡是出现了大量的商品需要创建并且这些商品实现了共同的接口时,考试使用工厂方法模式。

    简单工厂模式:

    我们以发邮件和发短信为例,首先创建一个sender接口,然后创建它的两个实现类mailSender和smsSender,最后再创建工厂类。


    简单工厂模式

    多个工厂方法模式:

    多个工厂方法模式与简单工厂方法模式的区别在于,如果在简单工厂方法模式中传递的参数有误则不能正确创建对象,而多个工厂方法模式提供多个工厂方法分别创建对象。我们将上面的代码修改一下sendFactory


    多个工厂方法模式

    静态工厂方法模式:

    静态工厂方法模式就是将工厂中的方法设为静态的,不需要创建实例,直接调用即可

    抽象工厂方法模式:

    在普通工厂方法模式中有一个问题,就是如果要扩展程序就要对工厂类进行修改,为了解决这个问题,就需要用到抽象工厂模式,要对功能进行扩展只需要添加工厂类即可而不是对工厂类进行修改。


    抽象工厂方法模式

    2.单例模式:

    单例模式的特点:
    • 单例类只有一个实例,构造函数是私有的
    • 何时使用:当想控制实例数目节约系统资源的时候
    • 使用场景:1.产生唯一的序列号,2.web中的计数器,不需要每次刷新都在数据库中加一次,可以先用单例缓存起来,3.创建一个对象需要消耗的资源过多,比如IO或者数据库操作

    单例类的几种实现方式:

    懒汉式

    线程不安全,被调用的时候才初始化


    懒汉式
    线程安全的懒汉式:

    加synchronized保证线程安全,但会影响效率。懒加载


    线程安全的懒汉式
    饿汉式

    线程安全,不会发生懒加载

    • 优点:没有加锁,效率高
    • 缺点:类加载就初始化,浪费内存


      饿汉式
    双重锁校验:

    这种方式采用双重锁方式来保证线程安全。懒加载


    双重锁校验
    枚举

    枚举实现的单例模式是线程安全的,不会延迟初始化。


    枚举

    代理模式

    假设C类要调用A类,但是A类不给C类直接调用,我们可以在A类与C类之间添加一个B类,A类和B类实现了共同的接口,接口的实现是在A类中,C类通过调用B类来实现对A类的调用


    代理模式类图

    外观模式

    现在流行炒股,股民一般都手持好多个股票,而股民每天需要关注手中N个股票的动向,随时针对不同的股票作出不同的决策,这样感觉心好累;于是有的人选择买基金。基金本质上还是炒股票,只不过基金机构拿了投资人的钱买了N个股票,而我们只要购买一个基金就够了,对N个股票的管理就交给基金机构去折腾了

    假设现在有多个子系统,如果客户端直接与这些子系统进行交互,客户端将会变的很复杂,这时候需要引入一个外观类负责与这些子系统进行交互,客户端只需要调用外观类的接口就可以了

    装饰模式

    运行的过程中,给一个对象动态地添加一些额外的行为。每一个具体的装饰类都为被装饰类添加一个功能

    相关文章

      网友评论

          本文标题:设计模式知识点--持续更新

          本文链接:https://www.haomeiwen.com/subject/nvjfkftx.html