Java基础总结之设计模式(四)

本文通过实例详细介绍了适配器模式的应用场景及其实现方法,旨在解决接口方法过多导致的代码冗余问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

适配器模式:

我们在开发程序的是时候,我们会写接口,会写接口的实现类,但是当接口中的方法很多时,我们则会因为为了使用里面的一个功能而"被迫"实现接口中的所有方法。这样的效率是很低的。就算是接口中其他的方法全部空实现,那对于代码的冗余等爷都是很大的。所以适配器模式是思想是将一个接口转换成客户希望的另外一个接口。就上诉的例子来讲,我就是不想实现那么多方法,我作为客户,我的需求就是,你给我一个适配器类,你可以是全部是空实现也好或者是其他方式实现了这个类也好,反正我都不管,我就继承你的,然后我自己来重写方法。刚开始自己对适配器模式其实也不算了解,网上的人都讲得很专业,于是自己是通过以下程序让自己明白适配器模式是什么样的一个模式。

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图形界面编程那一个博文,能在监听事件的线程过程中有所体会有所感悟。


注:以上文章仅是个人学习过程总结,若有不当之处,望不吝赐教。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值