适配器模式:
我们在开发程序的是时候,我们会写接口,会写接口的实现类,但是当接口中的方法很多时,我们则会因为为了使用里面的一个功能而"被迫"实现接口中的所有方法。这样的效率是很低的。就算是接口中其他的方法全部空实现,那对于代码的冗余等爷都是很大的。所以适配器模式是思想是将一个接口转换成客户希望的另外一个接口。就上诉的例子来讲,我就是不想实现那么多方法,我作为客户,我的需求就是,你给我一个适配器类,你可以是全部是空实现也好或者是其他方式实现了这个类也好,反正我都不管,我就继承你的,然后我自己来重写方法。刚开始自己对适配器模式其实也不算了解,网上的人都讲得很专业,于是自己是通过以下程序让自己明白适配器模式是什么样的一个模式。
package h.l.adapterpattern;
public class Student {
private int id;
private String username;
}
package h.l.adapterpattern;
public interface StudentDao {
public abstract void add(Student s);//增加
public abstract void delete(int id);//删除
public abstract void update(int id);//更新
public abstract void find(int id);//查找
}
package h.l.adapterpattern;
public class StudentDaoImpl implements StudentDao {
@Override
public void add(Student s) {
System.out.println("增加操作!");
}
@Override
public void delete(int id) {
System.out.println("删除操作!");
}
@Override
public void update(int id) {
System.out.println("更新操作!");
}
@Override
public void find(int id) {
System.out.println("查找操作!");
}
}
package h.l.adapterpattern;
public class Test {
public static void main(String[] args) {
Student s = new Student();
StudentDao sd = new StudentDaoImpl();
sd.add(s);
}
}
//执行结果
增加操作!
上面的代码是我们常规的写法,但是仔细那么一想,万一我接口里面写了那么多方法,而我想要实现这个StudentDao接口的类只需要用到一个怎么办?我难不成还是和这个StudentDaoImpl一样,全部实现了他的类吗?当然不希望那样!那么此时适配器的作用就来了,我新建一个类空实现这个接口:
package h.l.adapterpattern;
public class StudentDaoAdapter implements StudentDao {
@Override
public void add(Student s) {
System.out.println("增加操作!");
}
@Override
public void delete(int id) {
System.out.println("删除操作!");
}
@Override
public void update(int id) {
System.out.println("更新操作!");
}
@Override
public void find(int id) {
System.out.println("查找操作!");
}
}
新建完成后,我就可以根据我的需求想要实现该接口的那个方法,我就继承这个适配器类,重写该方法就可以!
package h.l.adapterpattern;
public class AnyMethodImpl extends StudentDaoAdapter {
@Override
public void add(Student s) {
System.out.println("适配器模式下运行");
super.add(s);
}
}
package h.l.adapterpattern;
public class Test {
public static void main(String[] args) {
Student s = new Student();
StudentDao sd = new AnyMethodImpl();
sd.add(s);
}
}
//执行结果
适配器模式下运行
增加操作!
显然,有了适配器模式,我们是否就可以考虑把各种行为都写在同一个接口里面,然后给他一个适配器类直接去继承,需要哪个方法就实现哪个方法了呢?当然依旧设计原则的六点,还是建议将行为分分类,写进不同的接口。另外最后在强调一点的是如果觉得适配器模式在上述代码中感觉体现不出其效果,建议不妨去参考Java基础总结之GUI图形界面编程那一个博文,能在监听事件的线程过程中有所体会有所感悟。
注:以上文章仅是个人学习过程总结,若有不当之处,望不吝赐教。