代理模式 例題1

訂單系統:

一旦訂單被創建, 只有訂單的創建人纔可以修改訂單由的數據,其他人則不能修改。三個屬性:產品名稱、訂購數量、訂購人。

在這裏插入圖片描述

定義訂單的接口:

public interface OrderApi {
	public String getProductName();
	public void setProductName(String productName,String user);
	public int getOrderNum();
	public void setOrderNum(int orderNum,String user);
	public String getOrderUser();
	public void setOrderUser(String orderUser,String user);
}

真實的用戶:

public class Order implements OrderApi {
	
	private String productName;
	private int orderNum;
	private String orderUser;

	public Order(String productName, int orderNum, String orderUser) {
		super();
		this.productName = productName;
		this.orderNum = orderNum;
		this.orderUser = orderUser;
	}

	@Override
	public String getProductName() {
		return productName;
	}

	@Override
	public void setProductName(String productName, String user) {
		this.productName=productName;
	}

	@Override
	public int getOrderNum() {
		return orderNum;
	}

	@Override
	public void setOrderNum(int orderNum, String user) {
		this.orderNum=orderNum;
	}

	@Override
	public String getOrderUser() {
		return orderUser;
	}

	@Override
	public void setOrderUser(String orderUser, String user) {
		this.orderUser=orderUser;
	}

}

代理用戶:

public class OrderProxy implements OrderApi {

	private Order order=null;
	
	public OrderProxy(Order real) {
		this.order = real;
	}

	@Override
	public String getProductName() {
		return this.order.getProductName();
	}

	@Override
	public void setProductName(String productName, String user) {
		if(user!=null&&user.equals(this.getOrderUser())) {
			order.setProductName(productName, user);
		}
		else {
			System.out.println("對不起"+user+", 您無權修改訂單中的產品名稱");
		}

	}

	@Override
	public int getOrderNum() {
		return this.order.getOrderNum();
	}

	@Override
	public void setOrderNum(int orderNum, String user) {
		if(user!=null&&user.equals(this.getOrderUser())) {
			order.setOrderNum(orderNum, user);
		}
		else {
			System.out.println("對不起"+user+", 您無權修改訂單中的訂購數量");
		}
	}

	@Override
	public String getOrderUser() {
		return this.order.getOrderUser();
	}

	@Override
	public void setOrderUser(String orderUser, String user) {
		if(user!=null&&user.equals(this.getOrderUser())) {
			order.setOrderUser(orderUser, user);
		}
		else {
			System.out.println("對不起" +user+",您無權修改訂單中的訂購人");
		}
	}
	public String toString() {
		return "ProductName="+this.getProductName()+",orderNum="+
				this. getOrderNum()+",orderUser="+this .getOrderUser();
	}
}

客戶端:

public class Client {

	public static void main(String[] args) {
		OrderApi order=new OrderProxy(new Order("設計模式",100,"張三"));
		order.setOrderNum(123, "李四");
		System.out.println("李四修改後訂單記錄沒有變化: "+order);
		order.setOrderNum(123,"張三");
		System.out.println("張三修改後,訂單記錄: "+order);
	}

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章