1. 程式人生 > >使用代理模式來給交易模塊添加緩存功能

使用代理模式來給交易模塊添加緩存功能

update .get 實現接口 pri 一個 main 構造 aps vat

這篇文章裏面,我們通過給交易模塊模擬一個緩存功能,來記錄代理模式的使用過程:

  1. 靜態代理

        靜態代理主要是通過實現接口來完成,類圖結構如下:

        這種方式比較簡單,代理類和業務類都實現同一個接口,代理類中重寫一個入參類型和接口保持一致的構造函數,並在接口的實現方法中實現代理功能,具體代碼我們通過改造訂單模塊來演示:

    //新建一個ICahe接口,讓IOrder接口繼承ICache接口
    public interface ICache {
        public void cacheData();
    }

    改造OrderService類,主要是實現cacheData方法:

    //訂單的實現類
    public class OrderService implements IOrder {
    
        private static OrderEntity cacheOrder = null;
        @Override
        public List<OrderEntity> findOrder(OrderEntity orderCondition) {
            return null;
        }
        @Override
        public List<OrderEntity> updateOrder(OrderEntity order) { return null;}
        @Override
        public OrderEntity addOrder(OrderEntity order) {
            System.out.println("創建了一個訂單:"+order.getOrderId());
            cacheOrder = order;
            return null;
        }
        @Override
        public void cacheData() {
            System.out.println("緩存了一個訂單:"+cacheOrder.getOrderId());
        }
    }

    編寫CahceProxy類,主要用來實現代理:

    技術分享圖片View Code

    編寫測試類,我們已經把緩存Order的這個操作交給了Poxy來實現,這樣當我們需要給其他業務模塊添加緩存功能的時候,就可以不用處理緩存的事務,全部交給代理類來完成

    class StaticProxy {
        public static void main(String[] args) {
            OrderEntity order = new OrderEntity();
            order.setOrderId("1000");
            IOrder orderService = new OrderService();
            orderService.addOrder(order);
            ICache cacheProxy = new CacheProxy(orderService);
            cacheProxy.cacheData();
        }
    }

  2. 動態代理
  3. cglib代理

使用代理模式來給交易模塊添加緩存功能