迭代器模式和原型模式

本文介绍了迭代器模式和原型模式的设计理念与实现方法。迭代器模式提供了一种顺序访问聚合对象的方式,而原型模式则通过复制现有实例来提高创建对象的效率。
前言:各种设计模式示例代码请查看: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类型是深拷贝,其他都是浅拷贝。


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值