Автор оригинала: Pankaj Kumar.
Шаблон прокси-дизайна является одним из шаблонов структурного проектирования и, на мой взгляд, одним из самых простых для понимания.
Шаблон Проектирования прокси-сервера
Замысел шаблона прокси-дизайна в соответствии с Богом таков:
Предоставьте суррогат или заполнитель для другого объекта, чтобы контролировать доступ к нему.
Само определение очень четкое, и шаблон проектирования прокси используется, когда мы хотим обеспечить контролируемый доступ к функциональности.
Допустим, у нас есть класс, который может выполнять некоторые команды в системе. Теперь, если мы его используем, это нормально, но если мы хотим передать эту программу клиентскому приложению, у нее могут возникнуть серьезные проблемы, потому что клиентская программа может выдать команду на удаление некоторых системных файлов или изменение некоторых настроек, которые вам не нужны.
Здесь может быть создан прокси-класс для обеспечения контролируемого доступа к программе.
Шаблон Проектирования Прокси – Основной Класс
Поскольку мы кодируем Java в терминах интерфейсов, вот наш интерфейс и класс его реализации.
Поскольку мы кодируем Java в терминах интерфейсов, вот наш интерфейс и класс его реализации.
package com.journaldev.design.proxy; public interface CommandExecutor { public void runCommand(String cmd) throws Exception; }
Поскольку мы кодируем Java в терминах интерфейсов, вот наш интерфейс и класс его реализации.
package com.journaldev.design.proxy; import java.io.IOException; public class CommandExecutorImpl implements CommandExecutor { @Override public void runCommand(String cmd) throws IOException { //some heavy implementation Runtime.getRuntime().exec(cmd); System.out.println("'" + cmd + "' command executed."); } }
Шаблон Проектирования Прокси – Прокси-Класс
Теперь мы хотим предоставить полный доступ только пользователям с правами администратора вышеуказанного класса, если пользователь не является администратором, то будут разрешены только ограниченные команды. Вот наша очень простая реализация прокси-класса.
Теперь мы хотим предоставить полный доступ только пользователям с правами администратора вышеуказанного класса, если пользователь не является администратором, то будут разрешены только ограниченные команды. Вот наша очень простая реализация прокси-класса.
package com.journaldev.design.proxy; public class CommandExecutorProxy implements CommandExecutor { private boolean isAdmin; private CommandExecutor executor; public CommandExecutorProxy(String user, String pwd){ if("Pankaj".equals(user) && "J@urnalD$v".equals(pwd)) isAdmin=true; executor = new CommandExecutorImpl(); } @Override public void runCommand(String cmd) throws Exception { if(isAdmin){ executor.runCommand(cmd); }else{ if(cmd.trim().startsWith("rm")){ throw new Exception("rm command is not allowed for non-admin users."); }else{ executor.runCommand(cmd); } } } }
Клиентская программа Шаблона Проектирования Прокси-сервера
Клиентская программа Шаблона Проектирования Прокси-сервера
package com.journaldev.design.test; import com.journaldev.design.proxy.CommandExecutor; import com.journaldev.design.proxy.CommandExecutorProxy; public class ProxyPatternTest { public static void main(String[] args){ CommandExecutor executor = new CommandExecutorProxy("Pankaj", "wrong_pwd"); try { executor.runCommand("ls -ltr"); executor.runCommand(" rm -rf abc.pdf"); } catch (Exception e) { System.out.println("Exception Message::"+e.getMessage()); } } }
Вывод приведенного выше примера шаблона проектирования прокси-сервера является:
'ls -ltr' command executed. Exception Message::rm command is not allowed for non-admin users.
Шаблон проектирования прокси-сервера обычно используется для управления доступом или для обеспечения реализации оболочки для повышения производительности.
Пакет Java RMI использует шаблон прокси-сервера. Это все для шаблона проектирования прокси-сервера в java.