• 常用的设计模式


    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,我们可以认为是不同的策略

    可以考虑策略模式的使用

  • 相关阅读:
    Webdriver启动Firefox浏览器后,页面显示空白
    Windows+Python+Selenium基础篇之1-环境搭建
    office2010无法卸载问题
    .NET使用FastDBF读写DBF
    并发编程相关概念
    C#的多线程简洁笔记
    asp.net core 3.1 入口:Program.cs中的Main函数
    【WPF学习】第四十四章 图画
    .NET知识梳理——1.泛型Generic
    C#个推SDK推送安卓+iOS
  • 原文地址:https://www.cnblogs.com/lyr-2000/p/12503087.html
Copyright © 2020-2023  润新知