实现一个双向适配器实例,使得猫(Cat)可以学狗(Dog)叫,狗可以学猫抓老鼠。绘制相应类图并使用代码编程模拟。 1、画出UML类图(30分) 2、使用Java语言编程实现(30分)
时间: 2024-05-09 15:20:00 浏览: 15
1. UML类图
```
+-----------------------+
| Animal |
+-----------------------+
| +setCallSound(sound:String):void|
| +call():void |
| +setAction(action:String):void|
| +action():void |
+-----------------------+
^ ^
| |
+-------+-------+ +-------+-------+
| Cat | | Dog |
+---------------+ +---------------+
| -catchMouse():void| | -learnCall():void|
+---------------+ +---------------+
```
2. Java代码
Animal.java
```java
public interface Animal {
void setCallSound(String sound);
void call();
void setAction(String action);
void action();
}
```
Cat.java
```java
public class Cat implements Animal {
private String callSound;
@Override
public void setCallSound(String sound) {
this.callSound = sound;
}
@Override
public void call() {
System.out.println("猫学狗叫:" + callSound);
}
@Override
public void setAction(String action) {
// 猫不需要学狗的动作
}
@Override
public void action() {
System.out.println("猫抓老鼠");
}
public void catchMouse() {
System.out.println("猫自己会抓老鼠");
}
}
```
Dog.java
```java
public class Dog implements Animal {
private String callSound;
private String action;
@Override
public void setCallSound(String sound) {
this.callSound = sound;
}
@Override
public void call() {
System.out.println("狗学猫叫:" + callSound);
}
@Override
public void setAction(String action) {
this.action = action;
}
@Override
public void action() {
System.out.println("狗学猫抓老鼠:" + action);
}
public void learnCall() {
this.setCallSound("喵喵喵");
}
}
```
Adapter.java
```java
public class Adapter implements Animal {
private Animal animal;
public Adapter(Animal animal) {
this.animal = animal;
}
@Override
public void setCallSound(String sound) {
animal.setCallSound(sound);
}
@Override
public void call() {
animal.call();
}
@Override
public void setAction(String action) {
animal.setAction(action);
}
@Override
public void action() {
animal.action();
}
public void learnCall() {
if (animal instanceof Dog) {
((Dog)animal).learnCall();
}
}
public void catchMouse() {
if (animal instanceof Cat) {
((Cat)animal).catchMouse();
}
}
}
```
Main.java
```java
public class Main {
public static void main(String[] args) {
Cat cat = new Cat();
Dog dog = new Dog();
Adapter catAdapter = new Adapter(cat);
Adapter dogAdapter = new Adapter(dog);
catAdapter.setCallSound("汪汪汪");
catAdapter.call();
catAdapter.setAction("捉老鼠");
catAdapter.action();
System.out.println();
dogAdapter.setCallSound("喵喵喵");
dogAdapter.call();
dogAdapter.setAction("抓老鼠");
dogAdapter.action();
System.out.println();
dogAdapter.learnCall();
dogAdapter.call();
System.out.println();
catAdapter.catchMouse();
}
}
```
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)