【设计模式 二】实战基金经理管理股票之静态代理模式

代理模式

定义:其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

简易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元!
基金经理:大胆向前冲!
请你谨慎投资,该股票处于危险期。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

hikktn

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

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

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

打赏作者

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

抵扣说明:

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

余额充值