Java设计模式之适配器模式(Adapter)

上课的时候不能撸其它代码,只能看下java设计模式的书,网上也有很多总结好的,但觉得自己总结一遍能收获的更多,下来慢慢总结下这些设计模式。之所以叫接口型模式,是因为这些设计模式都需要用到Interface。
适配器模式的意图
使用不同接口的类所提供的服务为客户端提供它所期望的接口
Adapter之类的适配器
比如一个客户找到黑猫要一件衣服,要求这件衣服必须要有拉链,扣子,高领(interface),但是黑猫我呢只有模板是拉链和扣子的(现有具体类),没有高领的,但是如果重新定义满足客户的要求的工作是很麻烦的,而且浪费空间,不能重用,那么现在就要用到类的适配器了,就是我们再弄一个子类来适配现有类(模板)去满足这个interface,关系图太麻烦,小长我还在学习中啊,直接写个代码总结吧
客户要求的功能(interface)

public interface Client {
    public void laLian();
    public void kouZi();
    public void gaoLin();
}

黑猫小长现在有的模板(现有类)

//看嘛,现在是不是没有高领,客户不干啊
public class NowHave {
    public void laLian(){
        System.out.println("我有拉链");
    }
    public void kouZi(){
        System.out.println("我有扣子");
    }
}

弄个小弟来适配现有模板去满足客户

//你要满足,肯定要实现这个接口涩,利用现有的模板当然要继承他了,最后
public class Adapter extends NowHave implements Client{

    @Override
    public void gaoLin() {
        // TODO Auto-generated method stub
        System.out.println("我有高领了");
    }

}

测试一下

//多态的知识,就满足了
public class Test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Client cl = new Adapter();
        cl.gaoLin();
        cl.kouZi();
        cl.laLian();
    }

}

Adapter之对象适配器
就是咱们可以间接利用适配器类去用咱有现有类的实例,比如咱们现有模板有一个方法是吧,但是客户要求的方法呢和这个名字不一样,但是要用到模板里的这个方法,咱就用适配器类来返回现有类的实例,通过这个实例调用这个需要用到的方法。直接上个例子:
要求类

//客户要求的内容
public abstract class RequredClass {
    public abstract String requiredMethod();
}

黑猫现在有的,并且是客户要求的可以用到的

//俺现在有的类,里面有个方法呢是要求类要用到的
public class ExistClass {
    public String  userfulMethod(){
        /*
         *内容 
         */
        return null;
    }
}

适配呗

//咱们来适配
public class Adapter extends RequredClass{
    //既然是对象适配器,要用到已有类的对象涩,定义一个先
    private ExistClass existClass;
    public Adapter(ExistClass existClass){
        this.existClass = existClass;
    }

    @Override
    public String requiredMethod() {
        // TODO Auto-generated method stub
        return existClass.userfulMethod();
    }
}

对象适配器更加脆弱
为啥子呢?对象适配器,俺们的适配器类没有继承接口,没有接口的约束,可能在运行时出现编译时无法检测到的问题,而且俺们不能想访问现有类的属性或方法,不能保证咱们现有类的属性或方法的声明方式,很难约束控制它们要做的事情。
Adapter之缺省适配器
就是客户本来要求很多功能,但是现在只需要一个功能了,不多说,直接上代码
要求的接口

//目标接口
public interface Target {
    public void method1();
    public void method2();
    public void method3();
}

再定义一个类继承上面的(只是一个中间过渡类)

public class GuoDu implements Target{

    //所有方法不必去实现
    @Override
    public void method1() {
        // TODO Auto-generated method stub

    }

    @Override
    public void method2() {
        // TODO Auto-generated method stub

    }

    @Override
    public void method3() {
        // TODO Auto-generated method stub

    }

}

客户只要method3的功能,咱们就只有method3涩

public class FunctionClass extends GuoDu {
    public void method3(){
        /*
         * 具体功能
         * */
    }
}

再来一个测试类

public class Test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Target target = new FunctionClass();
        target.method2();
    }

}
//你去调用method1和method2是没有效果的,因为俺们的功能类没有实现这个,这就是需要哪个,咱就重写哪个方法

Adapter应用场景
如果一个抽象类或者接口的话,就必须要重写所有的抽象方法。
那么,如果一个接口中定义的抽象方法过多,而子类中很多抽象方法又不需要用到,就应该设计一个适配器。在JAVA的GUI编程中,jdk就自动封装了多个适配器。比如: windowAdapter。

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值