题目背景:HIT软构2019大题
1.visitor
在不改变特定类型代码的基础上对特定类型object进行特定操作
例:要在ParkingField对象中新增一个方法(ParkingField主体已完成,pf为构造出来的对象)
(1)ParkingField中程序如下:pf.accpt(new CalculateRatioVisitor) (pf.accept 需要新增接口和实现,new的CalculateRatioVisitor要求新增接口和类)
(2)新增接口,其中只有一个方法:double visit(ParkingField pf)。再新增一个类实现此接口,并且具体实现这个visit方法
(3)在ParkingField接口中加入方法accept(上一个新增的接口 v),在上一个接口的实现代码中实现这个方法:return v.visit(this)
2.decorator
为对象增加不同侧面的特性,通过委托机制增加到对象上(多个特性叠加需要用递归思维)
例:在已有对象ParkingField基础上新增一个field:String company;新增功能特性:parking方法中最后打印欢迎信息
(1)新增抽象类,实现ParkingField接口,其中加入一个field:ConcreteParkingField pf;
(2)新增一个类,继承上一个抽象类,其中加入新的field:String company
其中constructer为:this.pf = pf; this.company = company;
其它方法中只需重写parking方法:pf.parking(c,num); system.out.println("Welcome");
3.Iterator
迭代器,略
例: 设计一个能逐个读取car类型的迭代器
(1)新增一个Iterable<car>接口,其中实现iterator()方法:方法返回new ParkingFieldIterrator()
(2)增加内部类ParkingFieldIterator继承上述接口,在其中实现hasNext(),next等方法
(3)具体应用:Iterator<Car> iterator = pf.iterator();