java设计模式
插座的比喻 | 实例程序 | |
---|---|---|
需求 | 两孔插座 | Two接口 |
交换装置 | 适配器 | Adapter类 |
实际接口 | 三孔插座 | Three接口 |
实际实现 | 三孔实现类 | Three类 |
类适配器模式(使用继承)
接口A中没有我们想要的方法 ,接口B中有合适的方法,不能改变访问接口A
定义一个适配器p:继续访问当前接口A中的方法
p继承
接口B的实现类BB : 可以在适配器P中访问接口B的方法
在适配器P中的接口A方法中直接引用BB中的合适方法
//Two接口Ithree:
public interface Ithree{
void isthree();
}
//Three接口Itwo:
public interface Itwo{
void istwo();
}
//Ithree接口的实现类
public class Three implements Ithree{
@Override
public void isthree() {
System.out.println("Three");
}
}
//适配器adapter
public class Adapter extends Three implements Itwo {
@Override
public void istwo() {
isthree();
}
}
//测试方法:Clienter
public class Clienter {
public static void main(String[] args) {
Two two = new Adapter();
two.istwo();
}
}
对象适配器模式
要访问的接口A中没有想要的方法 ,却在接口B中发现了合适的方法,接口A不能改变
定义一个适配器p:作用:实现我们访问的接口A
P中定义私有变量C(对象)
(B接口的实现类)
再定义一个带参数的构造器用来为对象C赋值
再在A接口的方法实现
中使用对象C调用其来源于B接口
的方法。
//Two接口Ithree:
public interface Ithree{
void isthree();
}
//Three接口Itwo:
public interface Itwo{
void istwo();
}
//Ithree接口的实现类
public class Three implements Ithree{
@Override
public void isthree() {
System.out.println("Three");
}
}
//适配器adapter
public class Adapter implements Itwo {
private Three three;
public Adapter(Three three){
this.three = three;
}
@Override
public void istwo() {
three.isthree();
}
}
//测试方法:Clienter
public class Clienter {
public static void main(String[] args) {
Two two = new Adapter();
two.istwo();
}
}
接口适配器模式
当存在这样一个接口,其中定义了N多的方法,却只想使用其中的一个到几个方法,如果我们直接实现接口,那么我们要对所有的方法进行实现,哪怕我们仅仅是对不需要的方法进行置空(只写一对大括号,不做具体方法实现)也会导致这个类变得臃肿,调用也不方便
使用一个抽象类
作为中间件——适配器:实现接口
,抽象类中所有的方法都进行置空
再创建抽象类的继承类
重写
我们需要使用的那几个方法
//目标接口A
public interface A {
void a();
void b();
void c();
void d();
void e();
void f();
}
//适配器:Adapter
public abstract class Adapter implements A {
public void a(){}
public void b(){}
public void c(){}
public void d(){}
public void e(){}
public void f(){}
}
//实现类:Asuccess
public clall Asuccess extends Adapter{
public void a(){
System.out.println("实现A方法被调用");
}
}
//测试类
public class Clienter {
public static void main(String[] args) {
A a = new Ashili();
a.a();
a.d();
}
}
总结