zoukankan      html  css  js  c++  java
  • 常用的设计模式

    1. Iterator模式
    2. Template Method 模式
    • 迭代器是什么?为什么要用迭代器?

    解释: 将遍历与实现分离出来,加入我只想要遍历一个集合,不想知道这是什么实现,实现多种多样,但是我的需求就只有一个,就是遍历,因此,使用迭代器模式,可以提供一个统一的接口给外部访问,不用让用户关心这是什么集合

    java 是面向接口编程,一般是 List<Integer> list = new LinkedList<>();或 ArrayList, 一般用接口去引用这个实现类,如果是使用具体的类来解决问题,容易导致类的强耦合,这些类难以作为组件复用,因此需要引入抽象类和接口,而Iterator 则是为List接口提供了统一遍历的方法

    那么,什么是 listItarator ,.listIterator 其实继承了 iterator 的接口,调用 list.iterator() ,其实是 返回

    是ListIterator,listIterator 方法比 iterator 方法多,可以添加元素,删除元素,逆向遍历

    至于 spliterator 之类的有时间再来慢慢研究了

    • 什么是 TemplateMethod (结合工厂模式学习)?

    依赖倒置原则

    面向过程的开发,上层调用下层,上层依赖于下层,也就是说如果 是 LinkedList list = new LinkedList();

    哪天我改成 ArrayList 了,别的方法调用了 list的方法就要改了,例如 我用了 LinkedList 里面的 removeFirst,removeLast 方法,而 ArrayList里是没有定义这个方法的

    也就是说,当下层发生剧烈的变动,上层也要变动,模块的复用性就会降低,提高开发成本

    而面向对象的开发的处理方法,则是定义一个接口,规范所有实现的子类,接口定义规则,由子类去写具体实现,这样的话用接口去引用子类 就能做到有意识的去规范自己的代码,降低后期改代码的成本。

    其实一般来说 抽象层的变化概率比较小,让用户代码分层,分离出抽象层,让用户程序依赖于抽象层,实现的目的依赖于抽象层。这样实现的细节不停的变动,抽象层不变,客户程序实现细节的耦合性就降低了

    首先要了解模板方法的意义 :

        父类模板编写了算法,无需在子类再编写算法(super关键字调用),如果模板方法有bug,那么修改后,改一处,子类的也就改了。使用Template method模式中,父类与子类紧密联系、共同工作,子类实现父类的抽象方法,必须了解抽象方法被调用的时机,父类和子类的互相协作支撑起整个程序,更多的方法实现写到父类,子类会变得很轻松,也降低了子类的灵活性,更多的实现方法放到子类,代码就会臃肿,各代码间出现重复

    从子类的角度来看,子类使用父类的定义方法,子类增加新方法来实现更多功能,子类重写父类的方法改变程序行为。

    而从父类的角度来看,父类期待(要求)子类去实现声明的抽象方法

    模板方法的使用场景:

    一次性实现一个算法不变的部分,并将可变行为留给子类实现

    各个子类中公共的行为被提取出并集中到一个公共的父类中,

    从而避免代码重复

    1.提高复用性

    2.提高扩展性

    3.符合开闭原则

     模板方法的缺点:

     1. 类的数目增加

     2. 增加了系统实现的复杂度

     3. 继承关系自身缺点,如果父类添加新的抽象方法,所有的子类都要改一遍

    模板方法的扩展:钩子方法

    相关的设计模式:1.工厂方法模式 ; 2.策略模式

    策略模式可以改变算法流程,而模板方法模式不改变算法流程

    一个 if,一个 else if, 不同的 if,我们可以认为是不同的策略

    可以考虑策略模式的使用

  • 相关阅读:
    Redis操作命令大全
    Redis实用监控工具一览
    Redis缓存雪崩、缓存穿透、缓存击穿、缓存降级、缓存预热、缓存更新
    Redis GEO地理位置信息,查看附近的人
    详解redis持久化
    详解Supervisor进程守护监控
    详解Redis Cluster集群
    arduino使用rfid
    树莓派控制WS2812
    Arduino读取温湿度dh11+烟雾气体MQ2+彩灯ws2812
  • 原文地址:https://www.cnblogs.com/lyr-2000/p/12503087.html
Copyright © 2011-2022 走看看