Java设计模式——代理模式实例

点此查看全部文字教程、视频教程、源代码

1. 代理的意思

代理就是代替别人处理,在面向对象里面就是一个对象代替另一个对象做事。那肯定是做的一个事,比如代替另一个对象去买菜,代替去排队。

代理对象和被代理对象都得能做这件事,怎么保证这一点,都实现一个接口就可以了。因为实现接口的对象必须实现接口定义的方法,这样就保证了代理对象是有能力做这件事的。

2. 一个完美的代理模式场景——代驾

喝酒不开车这个道理都懂,但是开车到了场合实在是想喝酒咋办,没事,叫代驾。

先分析这个场景有几种元素:

1、首先得有车,没车叫啥代驾

2、得有个喝醉酒的司机,当然这个司机得有驾照,得能开车

3、得有个代驾,代驾负责将车开回家。

3. 实现

先来辆车

package org.demo.proxy;
/**
 * 汽车
 */
public class Car {
	private String carName;//汽车名字
	public String getCarName() {
		return carName;
	}
	public void setCarName(String carName) {
		this.carName = carName;
	}
	
}	

然后保证能开车的资格,实际上就是司机认证

package org.demo.proxy;
/**
 * 代理接口-表示拥有驾驶者资格-喝酒的司机和代驾都拥有驾驶者资格
 */
public interface IDriver {
	/**
	 * 开车
	 */
	void driveCar();
}

如果没代驾,司机自己开车很危险

package org.demo.proxy;
/**
 * 喝酒的司机
 */
public class DrinkedDriver implements IDriver{
	/**
	 * 私有轿车
	 */
	private Car car;
	public DrinkedDriver(Car car) {
		this.car=car;
	}
	
	@Override
	public void driveCar() {
		System.out.println("DrinkedDriver的"+car.getCarName()+"在行驶");
	}
	
	public static void main(String[] args) {
		//在这个故事里有一辆车
		Car car=new Car();
		//车的名字是奔驰
		car.setCarName("奔驰");
		//有一个喝了酒的司机,开奔驰,这是违法行为
		DrinkedDriver dDriver=new DrinkedDriver(car);
		dDriver.driveCar();
		
	}
}

叫了代驾,安全回家

package org.demo.proxy;

/**
 * 代驾
 * 
 * @author easypanda
 */
public class ProxyDriver implements IDriver {// 代驾必须得有驾照,不然怎么代理别人开车?
	/**
	 * 代驾不需要有车,代驾有代理对象——醉酒司机
	 */
	private DrinkedDriver dDriver;

	/**
	 * 每次开始业务的时候还是需要先找到客户的车
	 */
	public ProxyDriver(Car car) {
		this.dDriver = new DrinkedDriver(car);// 现在代驾知道了客户和客户的车,可以把客户放车上,代驾坐驾驶位
	}

	@Override
	public void driveCar() {
		System.out.println("代驾接管车钥匙");
		dDriver.driveCar();
		System.out.println("代驾安全将客户送至家中");
	}

	public static void main(String[] args) {
		// 在这个故事里有一辆车
		Car car = new Car();
		// 车的名字是奔驰
		car.setCarName("奔驰");
		// 有一个代驾找到了喝酒司机的车
		ProxyDriver pDriver=new ProxyDriver(car);
		pDriver.driveCar();
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员大阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值