<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java_Tutorial%2FDesign_Pattern%2FProxy_Pattern</id>
		<title>Java Tutorial/Design Pattern/Proxy Pattern - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java_Tutorial%2FDesign_Pattern%2FProxy_Pattern"/>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java_Tutorial/Design_Pattern/Proxy_Pattern&amp;action=history"/>
		<updated>2026-04-23T14:38:40Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java_Tutorial/Design_Pattern/Proxy_Pattern&amp;diff=4452&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java_Tutorial/Design_Pattern/Proxy_Pattern&amp;diff=4452&amp;oldid=prev"/>
				<updated>2010-06-01T05:02:23Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 05:02, 1 июня 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java_Tutorial/Design_Pattern/Proxy_Pattern&amp;diff=4451&amp;oldid=prev</id>
		<title> в 17:44, 31 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java_Tutorial/Design_Pattern/Proxy_Pattern&amp;diff=4451&amp;oldid=prev"/>
				<updated>2010-05-31T17:44:27Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==  Dynamic Proxies ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.lang.reflect.InvocationHandler;&lt;br /&gt;
import java.lang.reflect.Method;&lt;br /&gt;
import java.lang.reflect.Proxy;&lt;br /&gt;
interface MyClass {&lt;br /&gt;
  void methodA(String s);&lt;br /&gt;
  void methodB(int i);&lt;br /&gt;
  String methodC(int i, String s);&lt;br /&gt;
}&lt;br /&gt;
public class DynamicProxyDemo {&lt;br /&gt;
  public static void main(String[] clargs) {&lt;br /&gt;
    MyClass prox = (MyClass) Proxy.newProxyInstance(MyClass.class.getClassLoader(), new Class[] { MyClass.class },&lt;br /&gt;
        new InvocationHandler() {&lt;br /&gt;
          public Object invoke(Object proxy, Method method, Object[] args) {&lt;br /&gt;
            System.out.println(&amp;quot;Method = &amp;quot; + method);&lt;br /&gt;
            if (args != null) {&lt;br /&gt;
              System.out.println(&amp;quot;args = &amp;quot;);&lt;br /&gt;
              for (int i = 0; i &amp;lt; args.length; i++)&lt;br /&gt;
                System.out.println(&amp;quot;\t&amp;quot; + args[i]);&lt;br /&gt;
            }&lt;br /&gt;
            return null;&lt;br /&gt;
          }&lt;br /&gt;
        });&lt;br /&gt;
    System.out.println(&amp;quot;about to call methodA&amp;quot;);&lt;br /&gt;
    prox.methodA(&amp;quot;hello&amp;quot;);&lt;br /&gt;
    System.out.println(&amp;quot;finish calling methodA&amp;quot;);&lt;br /&gt;
    prox.methodB(47);&lt;br /&gt;
    prox.methodC(47, &amp;quot;hello&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Proxy: fronting for another object ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
interface ProxyBase {&lt;br /&gt;
  void taskOne();&lt;br /&gt;
  void taskTwo();&lt;br /&gt;
  void taskThree();&lt;br /&gt;
}&lt;br /&gt;
class Implementation implements ProxyBase {&lt;br /&gt;
  public void taskOne() {&lt;br /&gt;
    System.out.println(&amp;quot;Implementation.f()&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  public void taskTwo() {&lt;br /&gt;
    System.out.println(&amp;quot;Implementation.g()&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  public void taskThree() {&lt;br /&gt;
    System.out.println(&amp;quot;Implementation.h()&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class Proxy implements ProxyBase {&lt;br /&gt;
  private ProxyBase implementation;&lt;br /&gt;
  public Proxy() {&lt;br /&gt;
    implementation = new Implementation();&lt;br /&gt;
  }&lt;br /&gt;
  public void taskOne() {&lt;br /&gt;
    implementation.taskOne();&lt;br /&gt;
  }&lt;br /&gt;
  public void taskTwo() {&lt;br /&gt;
    implementation.taskTwo();&lt;br /&gt;
  }&lt;br /&gt;
  public void taskThree() {&lt;br /&gt;
    implementation.taskThree();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public class ProxyDemo {&lt;br /&gt;
  public static void main(String args[]) {&lt;br /&gt;
    Proxy p = new Proxy();&lt;br /&gt;
    p.taskOne();&lt;br /&gt;
    p.taskTwo();&lt;br /&gt;
    p.taskThree();&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  The PoolManager using Proxy ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.util.ArrayList;&lt;br /&gt;
class PoolItem {&lt;br /&gt;
  boolean inUse = false;&lt;br /&gt;
  Object item;&lt;br /&gt;
  PoolItem(Object item) {&lt;br /&gt;
    this.item = item;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class ReleasableReference { // Used to build the proxy&lt;br /&gt;
  private PoolItem reference;&lt;br /&gt;
  private boolean released = false;&lt;br /&gt;
  public ReleasableReference(PoolItem reference) {&lt;br /&gt;
    this.reference = reference;&lt;br /&gt;
  }&lt;br /&gt;
  public Object getReference() {&lt;br /&gt;
    if (released)&lt;br /&gt;
      throw new RuntimeException(&amp;quot;Tried to use reference after it was released&amp;quot;);&lt;br /&gt;
    return reference.item;&lt;br /&gt;
  }&lt;br /&gt;
  public void release() {&lt;br /&gt;
    released = true;&lt;br /&gt;
    reference.inUse = false;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class PoolManager {&lt;br /&gt;
  private ArrayList&amp;lt;PoolItem&amp;gt; items = new ArrayList&amp;lt;PoolItem&amp;gt;();&lt;br /&gt;
  public void add(Object item) {&lt;br /&gt;
    items.add(new PoolItem(item));&lt;br /&gt;
  }&lt;br /&gt;
  public static class EmptyPoolItem {&lt;br /&gt;
  }&lt;br /&gt;
  public ReleasableReference get() {&lt;br /&gt;
    for (int i = 0; i &amp;lt; items.size(); i++) {&lt;br /&gt;
      PoolItem pitem = (PoolItem) items.get(i);&lt;br /&gt;
      if (pitem.inUse == false) {&lt;br /&gt;
        pitem.inUse = true;&lt;br /&gt;
        return new ReleasableReference(pitem);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return null;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
interface Connection {&lt;br /&gt;
  Object get();&lt;br /&gt;
  void set(Object x);&lt;br /&gt;
  void release();&lt;br /&gt;
}&lt;br /&gt;
class ConnectionImplementation implements Connection {&lt;br /&gt;
  public Object get() {&lt;br /&gt;
    return null;&lt;br /&gt;
  }&lt;br /&gt;
  public void set(Object s) {&lt;br /&gt;
  }&lt;br /&gt;
  public void release() {&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class ConnectionPool { // A singleton&lt;br /&gt;
  private static PoolManager pool = new PoolManager();&lt;br /&gt;
  private ConnectionPool() {&lt;br /&gt;
  }&lt;br /&gt;
  public static void addConnections(int number) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; number; i++)&lt;br /&gt;
      pool.add(new ConnectionImplementation());&lt;br /&gt;
  }&lt;br /&gt;
  public static Connection getConnection() {&lt;br /&gt;
    ReleasableReference rr = (ReleasableReference) pool.get();&lt;br /&gt;
    if (rr == null)&lt;br /&gt;
      return null;&lt;br /&gt;
    return new ConnectionProxy(rr);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class ConnectionProxy implements Connection {&lt;br /&gt;
  private ReleasableReference implementation;&lt;br /&gt;
  public ConnectionProxy(ReleasableReference rr) {&lt;br /&gt;
    implementation = rr;&lt;br /&gt;
  }&lt;br /&gt;
  public Object get() {&lt;br /&gt;
    return ((Connection) implementation.getReference()).get();&lt;br /&gt;
  }&lt;br /&gt;
  public void set(Object x) {&lt;br /&gt;
    ((Connection) implementation.getReference()).set(x);&lt;br /&gt;
  }&lt;br /&gt;
  public void release() {&lt;br /&gt;
    implementation.release();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
public class ConnectionPoolProxyDemo {&lt;br /&gt;
  public static void main(String args[]) {&lt;br /&gt;
    try {&lt;br /&gt;
      ConnectionPool.addConnections(5);&lt;br /&gt;
      Connection c = ConnectionPool.getConnection();&lt;br /&gt;
      c.set(new Object());&lt;br /&gt;
      c.get();&lt;br /&gt;
      c.release();&lt;br /&gt;
      c = ConnectionPool.getConnection();&lt;br /&gt;
      c.set(new Object());&lt;br /&gt;
      c.get();&lt;br /&gt;
      c.release();&lt;br /&gt;
      c.get();&lt;br /&gt;
    } catch (Exception e) {&lt;br /&gt;
      System.out.println(e.getMessage());&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;/div&gt;</summary>
			</entry>

	</feed>