不可以抽象出一个接口,多个真实角色实现这个接口,然后把接口放入代理角色,用多态实现不就行了吗??????
代码步骤:
1、接口
package com.kuang.Demo01;
//租房
public interface Rent {
void rent();
}
2、真实角色
package com.kuang.Demo01;
public class Host implements Rent{
@Override
public void rent() {
System.out.println("房东要出租房子");
}
}
3、代理角色
package com.kuang.Demo01;
//代理
public class Proxy implements Rent{
private Host host;
public Proxy() {
}
public Proxy(Host host) {
this.host = host;
}
@Override
public void rent() {
seeHouse();
host.rent();
fare();
hetong();
}
//看房子
public void seeHouse(){
System.out.println("中介带你看房子");
}
//收中介费
public void fare(){
System.out.println("收你中介费");
}
//签合同
public void hetong(){
System.out.println("中介和你签租赁合同");
}
}
4、客户端访问代理角色
package com.kuang.Demo01;
public class Client {
public static void main(String[] args) {
//房东
Host host = new Host();
//中介要帮房东租房子,但是呢,中介一般会有一些附属操作
Proxy proxy = new Proxy(host);
proxy.rent();
}
}
开闭原则:对软件实体应当扩展开放,对修改关闭
静态代理 再度理解
接口
package com.kuang.Demo02;
public interface UserService {
public void add();
public void delete();
public void select();
public void update();
}
接口实现类,也就是真实角色,房东
package com.kuang.Demo02;
public class UserServiceImpl implements UserService{
@Override
public void add() {
System.out.println("添加了用户");
}
@Override
public void delete() {
System.out.println("删除了用户");
}
@Override
public void select() {
System.out.println("修改了用户");
}
@Override
public void update() {
System.out.println("修改了用户");
}
}
代理对象
package com.kuang.Demo02;
public class UserProxy implements UserService{
private UserService userService;
public void setUserService(UserService userService) {
this.userService = userService;
}
@Override
public void add() {
Log("add");
userService.add();
}
@Override
public void delete() {
Log("delete");
userService.delete();
}
@Override
public void select() {
Log("select");
userService.select();
}
@Override
public void update() {
Log("update");
userService.update();
}
public void Log(String msg){
System.out.println("获取了"+msg+"的日志");
}
}
客户
package com.kuang.Demo02;
public class Client {
public static void main(String[] args) {
UserService userService = new UserServiceImpl();
UserProxy userProxy = new UserProxy();
userProxy.setUserService(userService);
userProxy.add();
System.out.println("=========");
}
}