JavaSE-静的プロキシ

プロキシパターン分類

  • 静的プロキシ
  • 動的プロキシ

1.1静的プロキシ

静的エージェントの役割分析

  • 抽象ロール:通常、インターフェースまたは抽象クラスを使用して実装されます。
  • 実際の役割:プロキシされる役割。
  • 演技の役割:実際の役割を演じる;実際の役割を演じた後、いくつかの補助的な操作が通常行われます。
  • クライアント:エージェントの役割を使用して、いくつかの操作を実行します。

1.2コード例

賃貸インターフェース(抽象的な役割)

package cn.guardwhy.domain;
// 抽象角色:租房
public interface Rent {
    
    
    public void rent();
}

家主

package cn.guardwhy.domain;
// 真实角色: 房东,要出租房子
public class Landlord implements Rent {
    
    
    @Override
    public void rent() {
    
    
        System.out.println("房屋出租!!!");
    }
}

プロキシはプロキシの役割です

package cn.guardwhy.proxy;

import cn.guardwhy.domain.Landlord;
import cn.guardwhy.domain.Rent;

public class Proxy implements Rent {
    
    
    private Landlord landlord;

    public Proxy() {
    
    

    }

    public Proxy(Landlord landlord) {
    
    
        this.landlord = landlord;
    }

    @Override
    // 租房
    public void rent() {
    
    
        // 调用方法
        seeHouse();
        landlord.rent();
        agreement();
        fare();
    }

    // 看房
    public void seeHouse(){
    
    
        System.out.println("带房客看房!!!");
    }
    // 合同
    public void agreement(){
    
    
        System.out.println("签租赁合同...");
    }
    // 收中介费
    public void fare(){
    
    
        System.out.println("收中介费");
    }
}

クライアント(テナント)

package cn.guardwhy.client;

import cn.guardwhy.domain.Landlord;
import cn.guardwhy.proxy.Proxy;

public class Client {
    
    
    public static void main(String[] args) {
    
    
        // 1.房东租房子
        Landlord landlord = new Landlord();
        // 2.代理,中介帮房东租房子
        Proxy proxy = new Proxy(landlord);
        // 3.不需要直接面对房东,直接找中介租房即可
        proxy.rent();
    }
}

の結果

分析結果

このプロセスでは、実際の生活と同じように、仲介業者と直接連絡を取ります。家主は見えませんが、いわゆる代理店モデルである代理店を通じて家主の家を借ります。

1.3静的プロキシの機能

利点:

  • 私たちの本当の役割をより純粋にすることができます。いくつかの公共の事柄にもはや注意を払う必要はありません。
  • 公務は代理人が行い、分業を実現します。
  • 公共サービスが拡大するにつれて、それらはより集中化されて便利になります。

短所:

クラスやエージェントクラスが増え、作業負荷が大きくなり、開発効率が低下します。

2.1静的プロキシの再理解

1.抽象的な役割

package cn.guardwhy.domain;
// 抽象角色,增删改查业务
public interface UserService {
    
    
    void add();
    void delete();
    void update();
    void query();
}

2.追加、削除、変更の操作を完了するための実際のオブジェクト

package cn.guardwhy.domain;
// 真实对象,完成增删改查的操作
public class UserServiceImpl implements UserService{
    
    
    @Override
    public void add() {
    
    
        System.out.println("增加了一个用户");
    }

    @Override
    public void delete() {
    
    
        System.out.println("删除了一个用户");
    }

    @Override
    public void update() {
    
    
        System.out.println("更新了一个用户");
    }

    @Override
    public void query() {
    
    
        System.out.println("查询一个用户");
    }
}

3.ログを処理するためのプロキシクラスを設定します

package cn.guardwhy.proxy;

import cn.guardwhy.domain.UserService;
import cn.guardwhy.domain.UserServiceImpl;

public class UserServiceProxy implements UserService {
    
    
    private UserServiceImpl userService;

    public UserServiceImpl getUserService() {
    
    
        return userService;
    }

    public void setUserService(UserServiceImpl userService) {
    
    
        this.userService = userService;
    }

    @Override
    public void add() {
    
    
        message("添加方法");
        userService.add();
    }

    @Override
    public void delete() {
    
    
        message("删除方法");
        userService.delete();
    }

    @Override
    public void update() {
    
    
        message("更新方法");
        userService.update();
    }

    @Override
    public void query() {
    
    
        message("查询方法");
        userService.query();
    }

    public void message(String msg){
    
    
        System.out.println("执行了" + msg + "方法!!");
    }
}

4.テストコード

package cn.guardwhy.client;

import cn.guardwhy.domain.UserServiceImpl;
import cn.guardwhy.proxy.UserServiceProxy;

public class Client2 {
    
    
    public static void main(String[] args) {
    
    
        // 1.真实业务
        UserServiceImpl userService = new UserServiceImpl();
        // 2.代理类
        UserServiceProxy proxy = new UserServiceProxy();
        // 3.使用代理类实现日志功能
        proxy.setUserService(userService);
        // 调用方法
        proxy.add();
    }
}

おすすめ

転載: blog.csdn.net/hxy1625309592/article/details/115031693