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

    一、创建型设计模式

    1、单例模式(Singleton):保证进程中,某个类只有一个实例

    多线程需要双判断(if)+锁(lock)

    if(){
    
      lock(){
    
        if(){
    
          }
      }
    
    }

    即使是单例的,变量也不是线程安全的,单例不是为了保证线程安全

    单例的好处就是单例,就是全局唯一的一个实例

    应对一些特殊情况,比如 全局唯一号码生成器

    单例可以避免重复创建,但是也会常驻内存

    除非是真的有必要,否则不要单例

    2、原型模式(Prototype):单例的基础上升级,把对象从内存中复制,然后返回新对象,但是又不是new出来的

    换个方式创建对象,不走构造函数,而是内存拷贝

    class Prototype
        {
            private static Prototype _Prototype = new Prototype();
    
            public static Prototype CreateInstence()
            {
                return (Prototype)_Prototype.MemberwiseClone();
            }
        }

    3.工厂模式:转移对象的创建,留下扩展空间

    把简单工厂拆分成多个工厂,保证每个工厂的相对稳定,但是要多new一次工厂

    中间层,屏蔽业务类变化的影响,而且可以留下创建对象的扩展空间

    4.抽象工厂:创建对象,创建一组不可分割的产品簇

    二、结构型设计模式

    1.适配器模式:解决重构的问题,新东西和旧系统不吻合,通过继承/组合进行适配

    类适配器(通过继承)

    对象适配器(通过组合)

    2.代理模式:通过代理完成对业务类的访问,包一层方便任意功能扩展

    3.装饰器模式:通过组合+继承,完成对象功能动态扩展,

    三、行为型设计模式

    1.模板方法设计模式:在基类父类定义流程,把可变逻辑分离到不同子类实现

    2.观察者模式:一个对象动作触发多个对象的行为,通过观察者可以去掉对象的依赖,支持各种自定义和扩展

    3.责任链模式:请求的处理流程,沿着链子顺序执行,还允许链子扩展和定制

  • 相关阅读:
    Echarts实现区级行政区划地图
    webpack4.x开发环境配置
    说说说vue.js中的组
    原生JS实现购物车功能详解
    面向对象的一些重要的基本概念
    Lucene教程
    开启事务时mybatis返回主键id
    生成二维码的方法,基于zxing
    mysql判断一条记录是否存在,如果存在,则更新此语句,如果不存在,则插入
    一:验证微信的Token
  • 原文地址:https://www.cnblogs.com/bjhblogs/p/12827013.html
Copyright © 2011-2022 走看看