本文已参与「新人创作礼」活动,一起开启掘金创作之路。
多态解析:
最早学一个变量------>内存空间(小容器) 只有一个
后来学一个数组------>内存空间(小容器) 存储一组一样的数据类型
好处是在于堆内存中存储的地址连续 便于循环遍历
数组创建时必须指定长度 频繁的添加或删除元素 个数固定就很不方便
再后来学习如何描述类--->利用自己描述的类ArrayBox创建对象(小容器) 存储一组元素
长度对于使用者来讲是可变的 便于循环遍历(底层就是数组)
频繁的在ArrayBox中插入元素 从中间位置删除元素 性能不高
上次学习利用链式结构--->利用自己描述的类LinkedBox创建对象(小容器) 存储一组元素
长度对于使用者来讲是可变的 双向链表结构 (底层实现Node对象 节点)
更加适合于插入元素或删除元素
每一个node对象的地址不是连续 循环效率比较慢
为了便于用于使用Box--->定义一个规则----->定义一个接口
public interface Box{
public boolean add(element);添加到末尾
public void add(int index,int element); 在给定的位置中插入一个元素
public void addAll(); 将给定的box中所有的元素添加至我们现在的box中
public int get(index);
public int remove(index);
public int size();
}
有了box可以做统一的规则约束
每一个子类都实现同一个规则 用户使用起来很容易
如果按照上述的方式来实现 规则添加了新的方法 所有的子类都跟着添加新的方法
设计模式
适配器模式 Adapter
定义一个规则--->和尚 吃斋 念经 打坐 撞钟 习武
缺省适配器模式
public abstract class AbstractBox implements Box{
public boolean add(element);
public void add(int index,int element){
}
public void addAll(){
}
public int get(index);
public int remove(index);
public int size();
public void rangeCheck(int index){
if(index<0 || index>=size){
自定义的异常
}
}
}
public class ArrayBox extends AbstractBox{
属性用来存储真实数据elementDate[]
属性用来记录有效元素个数 int size;
public boolean add(element){
}
public int get(index){
}
public int remove(index){
}
public int size(){
}
}
public class Node{
Node prev;
int item;
Node next;
}
public class LinkedBox extends AbstractBox{
属性存储首节点first
属性存储尾节点last
属性存储有效元素的个数size
public boolean add(element){
}
public int get(index){
}
public int remove(index){
}
public int size(){
返回有效元素的个数
}
}