紹興高端網(wǎng)站設(shè)計(jì)學(xué)校seo推廣培訓(xùn)班
代理模式是一種結(jié)構(gòu)型設(shè)計(jì)模式,它允許通過(guò)創(chuàng)建一個(gè)代理對(duì)象來(lái)控制對(duì)另一個(gè)對(duì)象的訪問(wèn)
實(shí)例介紹和實(shí)現(xiàn)過(guò)程
假設(shè)我們正在開(kāi)發(fā)一個(gè)電子商務(wù)網(wǎng)站,其中有一個(gè)商品庫(kù)存管理系統(tǒng)。我們希望在每次查詢商品庫(kù)存之前,先進(jìn)行權(quán)限驗(yàn)證,以確保只有授權(quán)用戶可以訪問(wèn)庫(kù)存信息。這時(shí)候可以使用代理模式來(lái)實(shí)現(xiàn)。
1、首先,定義一個(gè)商品庫(kù)存接口:
public interface Inventory {//被代理的功能int getStock(String productId);
}
2、創(chuàng)建真實(shí)的庫(kù)存管理類,實(shí)現(xiàn)該接口
public class InventoryManager implements Inventory {//實(shí)際的功能@Overridepublic int getStock(String productId) {// 實(shí)際的庫(kù)存查詢邏輯return 100;}
}
3、創(chuàng)建一個(gè)代理類,該代理類實(shí)現(xiàn)功能的接口,用于進(jìn)行權(quán)限驗(yàn)證并調(diào)用真實(shí)的庫(kù)存管理類
public class InventoryProxy implements Inventory {//被代理的類引用private Inventory inventory;private String username;private String password;//初始化代理類public InventoryProxy(String username, String password) {this.username = username;this.password = password;}//代理的功能@Overridepublic int getStock(String productId) {//實(shí)現(xiàn)功能前先進(jìn)行驗(yàn)證身份if (authenticate()) {//驗(yàn)證通過(guò)if (inventory == null) {inventory = new InventoryManager();}//使用功能return inventory.getStock(productId);} else {// 權(quán)限驗(yàn)證失敗,返回一個(gè)特定的值或拋出異常return -1;}}//驗(yàn)證方法private boolean authenticate() {// 進(jìn)行權(quán)限驗(yàn)證的邏輯// 這里假設(shè)驗(yàn)證邏輯為管理員身份才能操作return username.equals("admin") && password.equals("admin");}
}
4、使用功能
public class Main {public static void main(String[] args) {//創(chuàng)建代理類Inventory inventory = new InventoryProxy("admin", "admin");//執(zhí)行操作int stock = inventory.getStock("10");System.out.println("操作結(jié)果: " + stock);}
}