设计模式-适配器模式

追求适度,才能走向成功;人在顶峰,迈步就是下坡;身在低谷,抬足既是登高;弦,绷得太紧会断;人,思虑过度会疯;水至清无鱼,人至真无友,山至高无树;适度,不是中庸,而是一种明智的生活态度。

导读:本篇文章讲解 设计模式-适配器模式,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

(1)案例背景:

在课堂上我们学习了单向适配器的使用和实现,现在我们需要实现一个双向适配器,编写代码,使用Java语言实现双向适配器,使猫可以学狗叫,狗可以学猫抓老鼠,请绘制相应类图并实现。(课本167页第三题)

(2)实现步骤:

  • 根据题意,画出双向适配器的类图,类图中应该包含一个适配器类Adapter;两个抽象类Cat类和Dog类,Cat类中有发出叫声的方法cry()和捉老鼠的方法catchMouse(),Dog类中有发出狗叫声的方法wang()和动作方法action();两个具体适配者类ConcreteCat类和ConcreteDog类,两个抽象类互为抽象目标和抽象适配者,如果客户端针对Cat类编程,则Cat类充当抽象目标,Dog类充当抽象适配者,ConcreteCat类充当具体适配者,反之同理。
  • 根据类图,实现上述类的具体代码以及用户类Client,由于本题中只有一个适配器类Adapter,所以不需要通过XML文件来改变用户类的操作
  • 编译并运行代码,观察是否能让猫发出狗叫声和让狗实现抓老鼠的动作。

(3)案例总结:

在以下情况下可以使用适配器模式:

  • 系统需要使用一些现有的类,而这些类的接口丌符合系统的需要, 甚至没有这些类的源代码
  • 创建一个可以重复使用的类,用于和一些彼此之间没有太大关联 的类,包括一些可能在将来引进的类一起工作

代码结构:

 设计模式-适配器模式

详细代码:

Cat.java:

package Adapter;

public interface Cat {
    public void cry();
//    public void cry(){
//        System.out.println("小猫叫!");
//    }
public void catchMouse();
//    public void catchMouse(){
//        System.out.println("小猫捉老鼠!");
//    }
}

Dog.java:

package Adapter;



public interface Dog {

    public void wang();

//    {

//        System.out.println("小狗叫!");

//    }

    public void action();

//    {

//        System.out.println("小狗动!");

//    }

}

 

ConcreateCat.java:

package Adapter;



public class ConcreateCat implements Cat{

    @Override

    public void cry(){

        System.out.println("小猫叫!");

    }

    @Override

    public void catchMouse(){

        System.out.println("小猫捉老鼠!");

    }

}

ConcreateDog.java:

package Adapter;



public class ConcreateDog implements Dog{



    @Override

    public void wang(){

        System.out.println("小狗叫!");

    }

    @Override

    public void action(){

        System.out.println("小狗动!");

    }

}

 

Adapter.java:

package Adapter;



public class Adapter implements Cat,Dog{

    Dog dog ;

    Cat cat ;

    public Adapter(Dog dog){

        this.dog = dog;

    }



    public Adapter(Cat cat){

        this.cat = cat;

    }



        @Override

        public void wang() {

            System.out.println("小狗叫!");

        }



        @Override

        public void action() {

            cat.catchMouse();

        }









        @Override

        public void cry() {

            System.out.println("小猫叫!");

        }



        @Override

        public void catchMouse() {

            dog.action();

        }







}

 

Client.java:

package Adapter;



import javafx.scene.shape.ClosePathBuilder;



public class Client {

    public static void main(String[] args) {

System.out.println("详细设计实验报告  1904班白旭君  2019005368");



        Cat cat = new Adapter(new ConcreateDog());

        cat.cry();

        cat.catchMouse();





        Dog dog = new Adapter(new ConcreateCat());

        dog.wang();

        dog.action();





        }



    }

 

实验结果:

设计模式-适配器模式

写双向适配器的时候由于还未完全掌握将类图转变为代码的能力,也不太理解双向适配器的核心思想,于是查阅许多资料,经过反复修改,最终借鉴一个帖子

https://blog.csdn.net/qq_45703570/article/details/123807427

完成了编码。但是虽然完成了最终要求的目的,但是总觉得怪怪的,好像没有用到适配器模式的核心思想的样子。看来还是学无止境呀。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/128202.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!