关于设计模式

设计模式有23种.

其中,工厂模式和抽象工厂模式算作了两个模式

 

图来源  https://www.jianshu.com/p/4a5a0a92e7d5

关于设计模式

 

23 种模式,自己的简短主观认为:

 

 1.
    代理模式:

    代理类: 创建本体----> 获取代理实例 ---> 重写业务,在其中调用方法(如invoke)
    运行时候,创建本体----> 获取代理实例 ---> 执行本体的方法

  2. 
   单例模式
      2.1构造器私有化---禁止new 对象
      2.2直接给个public方法获取
      2.3饿汉式--->在属性时期直接new 出来?在静态代码块new出来 
        懒汉式---> 在获取实例时候new。  安全问题,第一,方法上加synchronized,  第二,双重检查,第二重判定时候加synchronized  
        
        静态内部类,利用volatile可见性 推荐

    
    1)饿汉式(静态常量)
    2)饿汉式(静态代码块)
    3)懒汉式(线程不安全)
    4)懒汉式(线程安全,同步方法)
    5)懒汉式(线程安全,同步代码块)
    6)双重检查
    7)静态内部类
    8)枚举
        
    
 3. 建造者模式的四个角色
    1)Product(产品角色):一个具体的产品对象。
    2)Builder(抽象建造者):创建一个Product对象的各个部件指定的接口/抽象类。
    3)ConcreteBuilder(具体建造者):实现接口,构建和装配各个部件。
    4)Director(指挥者):构建一个使用Builder接口的对象。它主要是用于创建一个复杂的对象。它主要有两个作用,一是:隔离了客户与对象的生产过程,二是:负责控制产品对象的生产过程。

   说说个人理解,上面可能讲解的太细致,
   其实建设者就是制造一个产品有很多工序,然后你作为一个指挥者,做一个自己想要的具体东西,看到底用哪些工序,不是说所有的你都必须点,你想要啥就要啥就可以了。 
  
  
  4. 组合模式
  就是一个类的属性是另一个类或者其他
  
  5. 原型模式
   可以暂时认为就是克隆,深克隆
  
  6. 责任链模式
  把需要处理一个任务的所有的人,去同时继承一个抽象类,   大家互相设置下一个处理人,使其形成链, 这就是责任链了。 
  
  
  7. 工厂模式
  三种: 简单工厂,  工厂方法,  抽象工厂
  感觉就是 让一堆有不同特性的子类 实现接口 , 然后要什么子类,传什么样的子类条件
  
  抽象工厂就是再往上抽象出一个接口
  
  8. 适配器模式
  创建一个中间类,方法就是把两者之间的东西映射起来
  
  9. 策略模式
  创建一个抽象类,让其他子类(假设为a)去继承
  行为上创建一个行为接口,让其他行为(假设为m)子类去实现。
  然后在a中设置m,这样就把行为给了对象了
  
  10. 桥接模式
  创建一个抽象类,让其他子类(假设为a)去继承
  再创建一个接口,让其他(假设为m)子类去实现。
  然后在a中设置m,这样就实现了一个东西同时拥有a.m两种层次的东西
  
  tip: 策略模式感觉是提前a中设置好了m,   桥接模式感觉更像是a预留设置m的地方,使用时候再设置。
  
  11. 装饰者模式
  创建一个A类,被装饰者和装饰类都应该继承或实现A。
  创建一个装饰类,让其他具体类继承他,
  然后把被装饰对象传入这个类,
  每传一次(也就是装饰一次), 都会被子类内的方法所改变(所装饰)
  
  附:这个核心在于在装饰类里组合一个A类字段,并在方法里调用
  
  12. 享元模式 
      更像是单例模式的多例版。
      保存一定量的对象,在使用的时候给使用者,没有的时候就创建并保存
      防止每次创建销毁,浪费性能
      比如池技术,常量池,数据连接池,缓冲池, integer -128--127也是这样
      
        
  13. 观察者模式
  
   创建一个数据类, 再创建一个观察者接口。让很多观察者继承
   数据类里放着观察者的集合, 每当有新数据,他就遍历调用观察者类的方法来通知他们
   
   创建新的观察者,只需要继承观察者接口即可
   
  14. 外观者模式

    如果做一件事,需要操作很多个东西。
    那么可以把这些操作封装在一个方法里
    
    这就叫做外观者模式,比如 一键安装软件就是这样
  
  15. 命令模式
    命令模式把 一个东西的操作单独拿出来封装成了对象(命令),将请求发起者与执行者解耦。
    增加了系统复杂度。
    
  16. 中介者模式
    创建一个类,把原先网状结构的依赖转换为星状,降低了耦合
    中介者需要处理每个类的事情,担负了巨大的责任
    
  17. 解释器模式
    一般用来模拟一些加减乘除等算术类的运算
    
  18. 迭代器模式
    按照迭代器的模式,建一个数组,一个指针,去复写遍历与查询
    
  19. 备忘录模式
    用一个对象保存当前状态,需要的时候,再从里面获取到对象状态
    
  20. 模板模式
     在一个方法,包含一些共有的部分(如方法),那些不共有的方法留到各自子类中去实现
     
  21. 访问者模式
  对同一个资源,不同的访问者要进行不同的操作,     那么就在各自访问者中进行各自的实现。    
  
  22. 状态模式
  在一个父类中定义好所有状态,在子类中分别去实现每个状态可以怎样,不可以怎样。 
  再用其他对象去调用它们。