zoukankan      html  css  js  c++  java
  • 常用设计模式及其原则

    (本文仅作为简单介绍,理解原理,如果深入学习请参考其他博文)

    what is 设计模式?

    无论开发中还是面试中,都需要用到设计模式。设计模式,是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。简单地说,就是前人总结出来的方法,抽象成一种解决问题的模式。

    设计模式设计原则

    设计模式有其独有的设计原则,这些原则保证了设计模式的高效性和底冗余。下面将通俗简单的介绍一下设计模式的六大使用原则。

    1)开闭原则:

    当应用的需求改变时,在不修改软件实体的源代码或者二进制代码的前提下,可以扩展模块的功能,使其满足新的需求。

    2)迪米特原则:

    如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。其目的是降低类之间的耦合度,提高模块的相对独立性。从依赖者的角度来说,只依赖应该依赖的对象。从被依赖者的角度说,只暴露应该暴露的方法。

    3)里式替换原则:

    子类可以扩展父类的功能,但不能改变父类原有的功能。也就是说:子类继承父类时,除添加新的方法完成新增功能外,尽量不要重写父类的方法。

    4)依赖倒置原则:

    依赖倒置原则的目的是通过要面向接口的编程来降低类间的耦合性

    5)单一职责原则:

    对象不应该承担太多职责

    6)接口隔离原则:

    要求程序员尽量将臃肿庞大的接口拆分成更小的和更具体的接口。让接口中只包含客户感兴趣的方法。要为各个类建立它们需要的专用接口,而不要试图去建立一个很庞大的接口供所有依赖它的类去调用。

    (看到这里的朋友,小声告诉你:本人亲手整理一张思维导图,包括Java基础、计算机基础知识,MySQL知识,大数据知识。面试绝对有帮助,点赞并关注作者(你给我的好处),私信即可领取PDF版(我给你的好处),交个朋友(本人985硕,腾讯实习中,学弟可指导),请勿外传)

    常见设计模式

    1)单例模式:

    是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

    这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。只能生成一个实例,减少系统开销,当一个对象产生比较多的资源时,如读取配置、产生其他依赖对象时,则可以通过在应用启动时直接升生成一个单例对象,然后永久主流内存的方式来解决。

    单例模式的创建:分为两种方式

    第一种为懒汉式:只是在调用getinstance时生成对象,不getinstance不生成。但是会有线程安全问题,一般加锁,但是效率稍微低一些。

    第二种为饿汉式 :即直接以静态属性在类的内部,作为唯一单例

    2)工厂模式:

    属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。工厂模式,顾名思义,即创造对象的工厂,想要创建对象的时候直接从工厂里拿而不是自己new,将创建者和调用者分离。

    工厂模式有几种实现方式,包括传统工厂模式、工厂方法模式,具体可以查阅详细资料。

    对于比较复杂的对象或者产品族(大量有相关性的对象)生产,可以用到抽象工厂模式,

    抽象工厂模式和工厂方法区别就是在于构建对象的复杂度上。抽象工厂提供一个创建一系列相关或相互依赖的对象的接口,而无需指定他们的具体类。

    简单地说,就是有一个抽象类,里面是规定一个公司该成产什么样的产品族,然后分别设置几个产品组接口,比如手机、路由,加入一个公司想加入,首先实现手机、路由接口,比如小米手机、路由,然后在继承这个抽象类,实现他规定的产品族,然后返回小米手机,小米路由,对应华为进来也一样。客户不需要了解具体实现,只需调用小米工厂,然后想要手机生产手机,想要路由生产路由。但添加产品组种类有点麻烦,需要增家种类,然后改变抽象类,改变对应的公司工厂类。

    如果想只管快速的了解抽象工厂模式,我推荐视频:

     https://www.bilibili.com/video/av71319889?from=search&seid=14344174559389771762

    3)适配器模式:

    适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。

    举个例子,比如你想给苹果手机充电,但是你只有Type-c的充电线,这时你可以设计一个转接头,转接头就是一种适配器。

    4)策略模式:

    针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。

    举个例子:一个书的不同打折方法,可以实现几种打折算法,然后传入一个统一的方法计算价格,针对传入的不同方法来计算不同的价格

    5)外观模式:

    举例子:如果是自己泡茶的话,需要准备茶叶,茶具,和开水。而去茶馆的话就只需要说老子要一碗冰红茶就OK了,服务员会帮你准备好一切。

    6)代理模式:

    提供一种代理以控制一个对象对其他对象的访问。可分为静态代理和动态代理。

    静态代理:自己实现代理类和被代理类接口,每一个类都有不同的代理

    动态代理:可以通过反射的方式代理多个类。

    7)观察者模式:

    当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。

    8)装饰着模式:

    装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。

  • 相关阅读:
    IntelliJ IDEA 14.03 java 中文文本处理中的编码格式设置
    应聘感悟
    STL string分析
    CUDA SDK VolumeRender 分析 (1)
    BSP
    CUDA SDK VolumeRender 分析 (3)
    CUDA SDK VolumeRender 分析 (2)
    Windows软件发布时遇到的一些问题
    Ten Commandments of Egoless Programming (转载)
    复习下光照知识
  • 原文地址:https://www.cnblogs.com/cun-yu/p/12737681.html
Copyright © 2011-2022 走看看