设计模式-代理模式

来源:互联网 发布:ubuntu16 安装软件 编辑:程序博客网 时间:2024/05/19 05:04

定义:为其他对象提供一种代理以控制这个对象的访问。

使用场景:在一些情况下,客户端不能直接访问一个对象,那么代理就起到中介的作用。有时,一次性创建一个对象需要很大开销时,可以使用代理来存储这个对象的信息,当需要那一部分时,再由创建。有时,当使用一个对象之前还需要做一些处理,这时候也可以用到代理。

一个最简单的代理模式的demo:我们在登陆一个系统时,登陆之前先检查用户名是否合法,并且纪录登陆和退出的时间。代码如下:

public class LoginAction {private String username;private String password;public LoginAction(String username,String password) {this.username = username;this.password = password;}public void login() {System.out.println(username+",login success!");}public void loginOut() {System.out.println(username+",88");}}public class LoginActionProxy {public void login(String username,String password) {if(check(username)) {LoginAction loginAction = new LoginAction(username, password);loginAction.login();}}public void loginOut(String username) {logEnd(username);}private boolean check(String username) {System.out.println(username+" is ok!");return true;}private void logStart(String username) {System.out.println(username+",start,time="+System.currentTimeMillis());}private void logEnd(String username) {System.out.println(username+",end,time="+System.currentTimeMillis());}}public class Client {public static void main(String[] args) {String username = "zhangsan";String password = "111222";LoginActionProxy proxy = new LoginActionProxy();proxy.login(username, password);try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}proxy.loginOut(username);}}

0 0