代理模式作业四: * 在租房代理这个功能中,我们将租房设计成两个方法,分别是询问房租(askRent)和签订合同(signContract), * 并在签订合同时收取一定的佣金,试用动态代理模式设计该租房代理的功能。
时间: 2024-04-30 11:19:00 浏览: 58
好的,我来为你实现这个租房代理的功能。
首先,我们需要定义一个租房接口,包括两个方法:询问房租和签订合同。
```java
public interface Rent {
void askRent();
void signContract();
}
```
然后,我们需要实现这个接口的具体类,即房东类和租客类。
```java
public class Landlord implements Rent {
@Override
public void askRent() {
System.out.println("询问房租");
}
@Override
public void signContract() {
System.out.println("签订合同");
}
}
public class Tenant implements Rent {
@Override
public void askRent() {
System.out.println("询问房租");
}
@Override
public void signContract() {
System.out.println("签订合同");
}
}
```
接下来,我们要实现一个代理类,来完成租房代理的功能。这个代理类需要实现InvocationHandler接口,并重写invoke方法。
```java
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class RentProxy implements InvocationHandler {
private Object object;
public RentProxy(Object object) {
this.object = object;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
if (method.getName().equals("signContract")) {
System.out.println("收取佣金");
}
return method.invoke(object, args);
}
public static Object createProxy(Object object) {
return Proxy.newProxyInstance(object.getClass().getClassLoader(),
object.getClass().getInterfaces(), new RentProxy(object));
}
}
```
最后,我们可以通过代理类来实现租房代理的功能。
```java
public class Main {
public static void main(String[] args) {
Landlord landlord = new Landlord();
Rent rent = (Rent) RentProxy.createProxy(landlord);
rent.askRent();
rent.signContract();
Tenant tenant = new Tenant();
rent = (Rent) RentProxy.createProxy(tenant);
rent.askRent();
rent.signContract();
}
}
```
输出结果如下:
```
询问房租
签订合同
收取佣金
询问房租
签订合同
收取佣金
```
可以看到,在签订合同方法中,代理类成功地实现了收取佣金的功能。这就是动态代理模式的作用。
阅读全文