代理模式
定义:其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
简易UML图
需求分析
股票是门学问,想要在里面一夜暴富,需要花费巨大的时间。而我们普通人又或者没有一点金融相关的知识,往往就是韭菜,散户的力量真的薄弱。而我们选择基金经理来帮助我们打理,股票的波动,需要人无时无刻不盯着,否则很容易错失良机,或脱离苦海。
ISubject :股票的玩法
StockSubjectImpl:股票的实际操作
StockProxyPoint:基金经理的操作
Main :主体程序的调用,类似于网站平台
具体实现
定义接口
package com.test.proxy;
/**
* 可代理的方法,要处理的事 股票的基本操作(股票的玩法,叫法)
*
* @author 12134
*
*/
public interface ISubject {
/**
* 购买股票
*
* @param gupiaoName 股票名
*/
String sellGoumai(String gupiaoName, int size);
/**
* 抛售股票
*/
String sellGupiao(String gupiaoName, int size);
/**
* 抄底
*/
String shellChaodi(String gupiaoName, int size);
}
定义接口实现类
package com.test.proxy.impl;
import com.test.proxy.ISubject;
/**
* 股票的实际上业务操作 怎么玩?怎么操作?
*
* @author 12134
*
*/
public class StockSubjectImpl implements ISubject {
/**
* 购买股票
*/
@Override
public String sellGoumai(String gupiaoName, int size) {
// 判断股票和网站里拥有的股票是否匹配
// 这里只是模拟,判空
if (gupiaoName == null) {
return "你选购的股票暂不开放!";
}
if (size < 10) {
return "对不起,你选购的股票最少股份为10支,请重新选择后,再次提交订单!";
}
int price = 0;
// 查询该股票价格
switch (gupiaoName) {
case "矿石股票":
price = 2000;
break;
case "石油股票":
price = 3000;
break;
case "食品股票":
price = 4000;
break;
case "医疗股票":
price = 5000;
break;
case "白酒股票":
price = 26000;
break;
default:
break;
}
// 总价
int zongjia = size * price;
return "恭喜你购买" + size + "支" + gupiaoName + "的股票,总计花费" + zongjia + "元!";
}
/**
* 抛售股票
*/
@Override
public String sellGupiao(String gupiaoName, int size) {
// 判断股票和网站里拥有的股票是否匹配
// 这里只是模拟,判空
if (gupiaoName == null) {
return "你选购的股票暂不开放!";
}
if (size < 10) {
return "对不起,你选购的股票最少股份为10支,请重新选择后,再次提交订单!";
}
int price = 0;
// 查询该股票价格
switch (gupiaoName) {
case "矿石股票":
// 股票降价了
price = 2000 / 2;
break;
case "石油股票":
// 股票涨价了
price = 3000 * 3;
break;
case "食品股票":
// 股票稳定
price = 4000;
break;
case "医疗股票":
// 股票破产了
price = 5000 * 0;
break;
case "白酒股票":
// 股票暴跌
price = 26000 / 1000;
break;
default:
break;
}
// 总价
int zongjia = size * price;
return "恭喜你卖出" + size + "支" + gupiaoName + "的股票,赚取总计" + zongjia + "元!";
}
/**
* 抄底
*/
@Override
public String shellChaodi(String gupiaoName, int size) {
// 判断股票和网站里拥有的股票是否匹配
// 这里只是模拟,判空
if (gupiaoName == null) {
return "你选购的股票暂不开放!";
}
if (size < 10) {
return "对不起,你选购的股票最少股份为10支,请重新选择后,再次提交订单!";
}
// 提示信息
if (gupiaoName == "白酒股票") {
return "请你谨慎投资,该股票处于危险期。";
}
return "恭喜你购买" + size + "支" + gupiaoName + "的股票";
}
}
定义代理类
package com.test.proxy.impl;
import com.test.proxy.ISubject;
/**
* 基金经理帮你操作
* @author 12134
*
*/
public class StockProxyPoint implements ISubject{
private ISubject iSubject =new StockSubjectImpl();
@Override
public String sellGoumai(String gupiaoName, int size) {
System.out.println("基金经理收取抽成!");
return iSubject.sellGoumai(gupiaoName, size);
}
@Override
public String sellGupiao(String gupiaoName, int size) {
System.out.println("基金经理收取服务费用!");
return iSubject.sellGupiao(gupiaoName, size);
}
@Override
public String shellChaodi(String gupiaoName, int size) {
System.out.println("基金经理:大胆向前冲!");
return iSubject.shellChaodi(gupiaoName, size);
}
}
定义主方法
package com.test;
import com.test.proxy.impl.StockProxyPoint;
public class Main {
public static void main(String[] args) {
StockProxyPoint point =new StockProxyPoint();
String sellGoumai = point.sellGoumai("矿石股票", 100);
System.out.println(sellGoumai);
String sellGupiao = point.sellGupiao("矿石股票", 99);
System.out.println(sellGupiao);
String shellChaodi = point.shellChaodi("白酒股票", 5000);
System.out.println(shellChaodi);
}
}
结果
基金经理收取抽成!
恭喜你购买100支矿石股票的股票,总计花费200000元!
基金经理收取服务费用!
恭喜你卖出99支矿石股票的股票,赚取总计99000元!
基金经理:大胆向前冲!
请你谨慎投资,该股票处于危险期。