迭代器模式和原型模式

来源:互联网 发布:詹姆斯生涯所有数据 编辑:程序博客网 时间:2024/06/01 08:23
前言:各种设计模式示例代码请查看:https://github.com/Wuchenwcf/MyCode/tree/master/DP

一、迭代器模式

实现单链表的迭代器类图如下

(1)主要特点:

该模式提供了一种顺序访问一个聚合对象中的各个元素,而不暴露其内部元素

(2)从上面可以看书迭代器模式有如下几个角色:

      Iterator: 抽象迭代器:所有迭代器都需要实现的接口,提供了游走聚合对象元素之间的方法。
      ConcreteIterator: 具体迭代器。利用这个具体的迭代器能够对具体的聚合对象进行遍历。每一个聚合对象都应该对应一个具体的迭代器。
      Aggregate: 抽象聚合类。
      ConcreteAggregate: 具体聚合类。实现creatorIterator()方法,返回该聚合对象的迭代器。

(4)优缺点

优点:
【1】 支持以不同的方式遍历一个聚合对象
【2】 简化了聚合类
【3】 在同一个聚合上可以有多个遍历
【4】 增加新的聚合类和迭代器类都很方便
缺点:
对于简单的遍历,比如说数组,使用迭代器方式遍历较为繁琐

(5)应用场景:

当要实现一个集合的时候,可以同时实现其迭代器。

二、Prototype设计模式

类图如下:



(1)为什么要使用Prototy模式。

使用原型模式创建对象比new一个对象在性能上要好得多。因为Object类的Clone方法,直接操作内存中的二进制流,特别是在复制大的对象时,性能的差别非常明显

(2) 在哪种情况下适合使用Prototype这种设计模式。

在需要创建许多个重复对象的时候使用原型模式,最好是对象有很多属性,但是拷贝后的对象只需要更改极少的属性。

(3)关于Object().clone();

Object直接在内存中复制对象,因此不会调用对象的构造函数。即使是单例模式的类,也能将其拷贝。

(4)关于深拷贝和浅拷贝

Object类的clone方法只会对基本类型进行深拷贝,对数组、引用和容器对象都是浅拷贝。要想使用深拷贝,需要自己实现。具体而言,JAVA8中,基本类型和String类型是深拷贝,其他都是浅拷贝。


0 0
原创粉丝点击