1、 UML设计图
(1) 类适配器UML
(2)对象适配器UML
2、 核心实现代码
对象适配器类: 采用继承,将Adaptee类转化到增加了新功能的Target接口。
public class ClassApater extends Adaptee implements Target { //类适配器,继承Adaptee,实现接口
public voidsortInt(int[]a)
{ double [] b=new double[a.length];
for (inti = 0; i < a.length;i++)
b[i]=(double)a[i]; //首先转化成Double类型,实现父类方法调用
sortDouble(b); //调用继承父类的sortDouble方法
for(inti = 0; i < a.length;i++)
a[i]=(int)b[i]; //转化成原来类型
}
}
对象适配器:采用调用的方法,将Adaptee类转化到增加了新功能的Target接口。
public class ObjectApater implements Target{
Adapteeadaptee=new Adaptee(); //实例化Adapter对象,调用Adapter方法
public void sortInt(int[] a)
{
double[] b = newdouble[a.length];
for (int i = 0; i < a.length; i++)
b[i] = (double) a[i]; //进行类型转换 ,编程double类型
sortDouble(b); //调用adapter排序方法
for (inti = 0; i < a.length;i++)
a[i] = (int) b[i]; //排序过后再次转回原来类型
}
@Override
public void sortDouble(double[] a) {
// TODO Auto-generated methodstub
this.adaptee.sortDouble(a);
}
}
对象适配器的按钮事件:
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
String [] str=textField.getText().split(",");//将字符串存储到字符串数组
int [] array=new int[str.length];
for (int i = 0; i < str.length;i++)
array[i]=Integer.parseInt(str[i]);//转化文本框的字符为整数
Target tg=new ObjectApater();//实例化对象适配器
tg.sortInt(array); //排序
String s1="";
for (int i = 0; i < array.length;i++) {
s1+=String.valueOf(array[i])+","; //S1是输出排序后结果的字符串
}
textArea.setText(s1);
} catch (Exception e2) { //异常处理
e2.printStackTrace();
JOptionPane.showMessageDialog(null, e2.getMessage());
// TODO: handle exception
}
}
});
心得体会
这次的适配器模式,难度不大,主要是理解每个类的作用:Target:即所期望的Java接口。
Adaptee:被继承的Java接口,dapter:将Adaptee类转化到增加了新功能的Target接口。并且要区分清楚类配器是继承,而对象适配器是调用,对象适配器模式可以帮许多种不同的源类都适配到同一个接口,而类适配器做不到这一点。
学习到现在,其实发觉软件体系结构这门课是非常具实用性的。以前编程对于类的定义是非常混乱的,并没有做好分类和架构的设置。而通过软件体系结构这门课的学习,代码格式比以前规范了不少。而且学习到至今的结构模式都是很基础,很实用。今后我会继续努力学习,学好编程。老师每周都更新实验书说明,并且非常详细,辛苦了。