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

	<entry>
		<id>http://jexp.ru/index.php?title=Java/Design_Pattern/Proxy_Pattern&amp;diff=7803&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java/Design_Pattern/Proxy_Pattern&amp;diff=7803&amp;oldid=prev"/>
				<updated>2010-06-01T06:50:46Z</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;Версия 06:50, 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://jexp.ru/index.php?title=Java/Design_Pattern/Proxy_Pattern&amp;diff=7802&amp;oldid=prev</id>
		<title> в 18:01, 31 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java/Design_Pattern/Proxy_Pattern&amp;diff=7802&amp;oldid=prev"/>
				<updated>2010-05-31T18:01:45Z</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;== Another Proxy Pattern ==&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;
/*&lt;br /&gt;
Software Architecture Design Patterns in Java&lt;br /&gt;
by Partha Kuchana &lt;br /&gt;
Auerbach Publications&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
import java.io.BufferedReader;&lt;br /&gt;
import java.io.DataOutputStream;&lt;br /&gt;
import java.io.File;&lt;br /&gt;
import java.io.FileInputStream;&lt;br /&gt;
import java.io.FileNotFoundException;&lt;br /&gt;
import java.io.FileOutputStream;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.io.InputStreamReader;&lt;br /&gt;
import java.util.Vector;&lt;br /&gt;
public class MainProxyApp {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    OrderIF order = new OrderProxy();&lt;br /&gt;
    Vector v = order.getAllOrders();&lt;br /&gt;
    v = order.getAllOrders();&lt;br /&gt;
    v = order.getAllOrders();&lt;br /&gt;
    v = order.getAllOrders();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class OrderProxy implements OrderIF {&lt;br /&gt;
  private int counter = 0;&lt;br /&gt;
  public Vector getAllOrders() {&lt;br /&gt;
    Order order = new Order();&lt;br /&gt;
    counter++;&lt;br /&gt;
    long t1 = System.currentTimeMillis();&lt;br /&gt;
    Vector v = order.getAllOrders();&lt;br /&gt;
    long t2 = System.currentTimeMillis();&lt;br /&gt;
    long timeDiff = t2 - t1;&lt;br /&gt;
    String msg = &amp;quot;Iteration=&amp;quot; + counter + &amp;quot;::Time=&amp;quot; + timeDiff + &amp;quot;ms&amp;quot;;&lt;br /&gt;
    //log the message&lt;br /&gt;
    FileUtil fileUtil = new FileUtil();&lt;br /&gt;
    fileUtil.writeToFile(&amp;quot;log.txt&amp;quot;, msg, true, true);&lt;br /&gt;
    return v;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
interface OrderIF {&lt;br /&gt;
  public Vector getAllOrders();&lt;br /&gt;
}&lt;br /&gt;
class Order implements OrderIF {&lt;br /&gt;
  public Vector getAllOrders() {&lt;br /&gt;
    FileUtil fileUtil = new FileUtil();&lt;br /&gt;
    Vector v = fileUtil.fileToVector(&amp;quot;orders.txt&amp;quot;);&lt;br /&gt;
    return v;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class MiscUtil {&lt;br /&gt;
  public static boolean hasDuplicates(Vector v) {&lt;br /&gt;
    int i = 0;&lt;br /&gt;
    int j = 0;&lt;br /&gt;
    boolean duplicates = false;&lt;br /&gt;
    for (i = 0; i &amp;lt; v.size() - 1; i++) {&lt;br /&gt;
      for (j = (i + 1); j &amp;lt; v.size(); j++) {&lt;br /&gt;
        if (v.elementAt(i).toString().equalsIgnoreCase(&lt;br /&gt;
            v.elementAt(j).toString())) {&lt;br /&gt;
          duplicates = true;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return duplicates;&lt;br /&gt;
  }&lt;br /&gt;
  public static Vector removeDuplicates(Vector s) {&lt;br /&gt;
    int i = 0;&lt;br /&gt;
    int j = 0;&lt;br /&gt;
    boolean duplicates = false;&lt;br /&gt;
    Vector v = new Vector();&lt;br /&gt;
    for (i = 0; i &amp;lt; s.size(); i++) {&lt;br /&gt;
      duplicates = false;&lt;br /&gt;
      for (j = (i + 1); j &amp;lt; s.size(); j++) {&lt;br /&gt;
        if (s.elementAt(i).toString().equalsIgnoreCase(&lt;br /&gt;
            s.elementAt(j).toString())) {&lt;br /&gt;
          duplicates = true;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      if (duplicates == false) {&lt;br /&gt;
        v.addElement(s.elementAt(i).toString().trim());&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return v;&lt;br /&gt;
  }&lt;br /&gt;
  public static Vector removeDuplicateDomains(Vector s) {&lt;br /&gt;
    int i = 0;&lt;br /&gt;
    int j = 0;&lt;br /&gt;
    boolean duplicates = false;&lt;br /&gt;
    String str1 = &amp;quot;&amp;quot;;&lt;br /&gt;
    String str2 = &amp;quot;&amp;quot;;&lt;br /&gt;
    Vector v = new Vector();&lt;br /&gt;
    for (i = 0; i &amp;lt; s.size(); i++) {&lt;br /&gt;
      duplicates = false;&lt;br /&gt;
      for (j = (i + 1); j &amp;lt; s.size(); j++) {&lt;br /&gt;
        str1 = &amp;quot;&amp;quot;;&lt;br /&gt;
        str2 = &amp;quot;&amp;quot;;&lt;br /&gt;
        str1 = s.elementAt(i).toString().trim();&lt;br /&gt;
        str2 = s.elementAt(j).toString().trim();&lt;br /&gt;
        if (str1.indexOf(&amp;quot;@&amp;quot;) &amp;gt; -1) {&lt;br /&gt;
          str1 = str1.substring(str1.indexOf(&amp;quot;@&amp;quot;));&lt;br /&gt;
        }&lt;br /&gt;
        if (str2.indexOf(&amp;quot;@&amp;quot;) &amp;gt; -1) {&lt;br /&gt;
          str2 = str2.substring(str2.indexOf(&amp;quot;@&amp;quot;));&lt;br /&gt;
        }&lt;br /&gt;
        if (str1.equalsIgnoreCase(str2)) {&lt;br /&gt;
          duplicates = true;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      if (duplicates == false) {&lt;br /&gt;
        v.addElement(s.elementAt(i).toString().trim());&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return v;&lt;br /&gt;
  }&lt;br /&gt;
  public static boolean areVectorsEqual(Vector a, Vector b) {&lt;br /&gt;
    if (a.size() != b.size()) {&lt;br /&gt;
      return false;&lt;br /&gt;
    }&lt;br /&gt;
    int i = 0;&lt;br /&gt;
    int vectorSize = a.size();&lt;br /&gt;
    boolean identical = true;&lt;br /&gt;
    for (i = 0; i &amp;lt; vectorSize; i++) {&lt;br /&gt;
      if (!(a.elementAt(i).toString().equalsIgnoreCase(b.elementAt(i)&lt;br /&gt;
          .toString()))) {&lt;br /&gt;
        identical = false;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return identical;&lt;br /&gt;
  }&lt;br /&gt;
  public static Vector removeDuplicates(Vector a, Vector b) {&lt;br /&gt;
    int i = 0;&lt;br /&gt;
    int j = 0;&lt;br /&gt;
    boolean present = true;&lt;br /&gt;
    Vector v = new Vector();&lt;br /&gt;
    for (i = 0; i &amp;lt; a.size(); i++) {&lt;br /&gt;
      present = false;&lt;br /&gt;
      for (j = 0; j &amp;lt; b.size(); j++) {&lt;br /&gt;
        if (a.elementAt(i).toString().equalsIgnoreCase(&lt;br /&gt;
            b.elementAt(j).toString())) {&lt;br /&gt;
          present = true;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      if (!(present)) {&lt;br /&gt;
        v.addElement(a.elementAt(i));&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return v;&lt;br /&gt;
  }&lt;br /&gt;
}// end of class&lt;br /&gt;
class FileUtil {&lt;br /&gt;
  DataOutputStream dos;&lt;br /&gt;
  /*&lt;br /&gt;
   * Utility method to write a given text to a file&lt;br /&gt;
   */&lt;br /&gt;
  public boolean writeToFile(String fileName, String dataLine,&lt;br /&gt;
      boolean isAppendMode, boolean isNewLine) {&lt;br /&gt;
    if (isNewLine) {&lt;br /&gt;
      dataLine = &amp;quot;\n&amp;quot; + dataLine;&lt;br /&gt;
    }&lt;br /&gt;
    try {&lt;br /&gt;
      File outFile = new File(fileName);&lt;br /&gt;
      if (isAppendMode) {&lt;br /&gt;
        dos = new DataOutputStream(new FileOutputStream(fileName, true));&lt;br /&gt;
      } else {&lt;br /&gt;
        dos = new DataOutputStream(new FileOutputStream(outFile));&lt;br /&gt;
      }&lt;br /&gt;
      dos.writeBytes(dataLine);&lt;br /&gt;
      dos.close();&lt;br /&gt;
    } catch (FileNotFoundException ex) {&lt;br /&gt;
      return (false);&lt;br /&gt;
    } catch (IOException ex) {&lt;br /&gt;
      return (false);&lt;br /&gt;
    }&lt;br /&gt;
    return (true);&lt;br /&gt;
  }&lt;br /&gt;
  /*&lt;br /&gt;
   * Reads data from a given file&lt;br /&gt;
   */&lt;br /&gt;
  public String readFromFile(String fileName) {&lt;br /&gt;
    String DataLine = &amp;quot;&amp;quot;;&lt;br /&gt;
    try {&lt;br /&gt;
      File inFile = new File(fileName);&lt;br /&gt;
      BufferedReader br = new BufferedReader(new InputStreamReader(&lt;br /&gt;
          new FileInputStream(inFile)));&lt;br /&gt;
      DataLine = br.readLine();&lt;br /&gt;
      br.close();&lt;br /&gt;
    } catch (FileNotFoundException ex) {&lt;br /&gt;
      return (null);&lt;br /&gt;
    } catch (IOException ex) {&lt;br /&gt;
      return (null);&lt;br /&gt;
    }&lt;br /&gt;
    return (DataLine);&lt;br /&gt;
  }&lt;br /&gt;
  public boolean isFileExists(String fileName) {&lt;br /&gt;
    File file = new File(fileName);&lt;br /&gt;
    return file.exists();&lt;br /&gt;
  }&lt;br /&gt;
  public boolean deleteFile(String fileName) {&lt;br /&gt;
    File file = new File(fileName);&lt;br /&gt;
    return file.delete();&lt;br /&gt;
  }&lt;br /&gt;
  /*&lt;br /&gt;
   * Reads data from a given file into a Vector&lt;br /&gt;
   */&lt;br /&gt;
  public Vector fileToVector(String fileName) {&lt;br /&gt;
    Vector v = new Vector();&lt;br /&gt;
    String inputLine;&lt;br /&gt;
    try {&lt;br /&gt;
      File inFile = new File(fileName);&lt;br /&gt;
      BufferedReader br = new BufferedReader(new InputStreamReader(&lt;br /&gt;
          new FileInputStream(inFile)));&lt;br /&gt;
      while ((inputLine = br.readLine()) != null) {&lt;br /&gt;
        v.addElement(inputLine.trim());&lt;br /&gt;
      }&lt;br /&gt;
      br.close();&lt;br /&gt;
    } // Try&lt;br /&gt;
    catch (FileNotFoundException ex) {&lt;br /&gt;
      //&lt;br /&gt;
    } catch (IOException ex) {&lt;br /&gt;
      //&lt;br /&gt;
    }&lt;br /&gt;
    return (v);&lt;br /&gt;
  }&lt;br /&gt;
  /*&lt;br /&gt;
   * Writes data from an input vector to a given file&lt;br /&gt;
   */&lt;br /&gt;
  public void vectorToFile(Vector v, String fileName) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; v.size(); i++) {&lt;br /&gt;
      writeToFile(fileName, (String) v.elementAt(i), true, true);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  /*&lt;br /&gt;
   * Copies unique rows from a source file to a destination file&lt;br /&gt;
   */&lt;br /&gt;
  public void copyUniqueElements(String sourceFile, String resultFile) {&lt;br /&gt;
    Vector v = fileToVector(sourceFile);&lt;br /&gt;
    v = MiscUtil.removeDuplicates(v);&lt;br /&gt;
    vectorToFile(v, resultFile);&lt;br /&gt;
  }&lt;br /&gt;
} // end FileUtil&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;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Proxy Pattern 2 ==&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;
//[C] 2002 Sun Microsystems, Inc.---&lt;br /&gt;
&lt;br /&gt;
import java.io.File;&lt;br /&gt;
import java.io.FileInputStream;&lt;br /&gt;
import java.io.FileOutputStream;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.io.ObjectInputStream;&lt;br /&gt;
import java.io.ObjectOutputStream;&lt;br /&gt;
import java.io.Serializable;&lt;br /&gt;
import java.util.ArrayList;&lt;br /&gt;
import java.util.Iterator;&lt;br /&gt;
public class RunProxyPattern {&lt;br /&gt;
  public static void main(String[] arguments) {&lt;br /&gt;
    System.out.println(&amp;quot;Example for the Proxy pattern&amp;quot;);&lt;br /&gt;
    System.out.println();&lt;br /&gt;
    System.out.println(&amp;quot;This code will demonstrate the use of a Proxy to&amp;quot;);&lt;br /&gt;
    System.out.println(&amp;quot; provide functionality in place of its underlying&amp;quot;);&lt;br /&gt;
    System.out.println(&amp;quot; class.&amp;quot;);&lt;br /&gt;
    System.out.println();&lt;br /&gt;
    System.out&lt;br /&gt;
        .println(&amp;quot; Initially, an AddressBookProxy object will provide&amp;quot;);&lt;br /&gt;
    System.out.println(&amp;quot; address book support without requiring that the&amp;quot;);&lt;br /&gt;
    System.out&lt;br /&gt;
        .println(&amp;quot; AddressBookImpl be created. This could potentially&amp;quot;);&lt;br /&gt;
    System.out.println(&amp;quot; make the application run much faster, since the&amp;quot;);&lt;br /&gt;
    System.out&lt;br /&gt;
        .println(&amp;quot; AddressBookImpl would need to read in all addresses&amp;quot;);&lt;br /&gt;
    System.out.println(&amp;quot; from a file when it is first created.&amp;quot;);&lt;br /&gt;
    System.out.println();&lt;br /&gt;
    if (!(new File(&amp;quot;data.ser&amp;quot;).exists())) {&lt;br /&gt;
      DataCreator.serialize(&amp;quot;data.ser&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    System.out.println(&amp;quot;Creating the AddressBookProxy&amp;quot;);&lt;br /&gt;
    AddressBookProxy proxy = new AddressBookProxy(&amp;quot;data.ser&amp;quot;);&lt;br /&gt;
    System.out.println(&amp;quot;Adding entries to the AddressBookProxy&amp;quot;);&lt;br /&gt;
    System.out.println(&amp;quot;(this operation can be done by the Proxy, without&amp;quot;);&lt;br /&gt;
    System.out.println(&amp;quot; creating an AddressBookImpl object)&amp;quot;);&lt;br /&gt;
    proxy.add(new AddressImpl(&amp;quot;Sun Education [CO]&amp;quot;, &amp;quot;500 El Dorado Blvd.&amp;quot;,&lt;br /&gt;
        &amp;quot;Broomfield&amp;quot;, &amp;quot;CO&amp;quot;, &amp;quot;80020&amp;quot;));&lt;br /&gt;
    proxy.add(new AddressImpl(&amp;quot;Apple Inc.&amp;quot;, &amp;quot;1 Infinite Loop&amp;quot;,&lt;br /&gt;
        &amp;quot;Redwood City&amp;quot;, &amp;quot;CA&amp;quot;, &amp;quot;93741&amp;quot;));&lt;br /&gt;
    System.out.println(&amp;quot;Addresses created. Retrieving an address&amp;quot;);&lt;br /&gt;
    System.out&lt;br /&gt;
        .println(&amp;quot;(since the address is stored by the Proxy, there is&amp;quot;);&lt;br /&gt;
    System.out&lt;br /&gt;
        .println(&amp;quot; still no need to create an AddressBookImpl object)&amp;quot;);&lt;br /&gt;
    System.out.println();&lt;br /&gt;
    System.out.println(proxy.getAddress(&amp;quot;Sun Education [CO]&amp;quot;).getAddress());&lt;br /&gt;
    System.out.println();&lt;br /&gt;
    System.out&lt;br /&gt;
        .println(&amp;quot;So far, all operations have been handled by the Proxy,&amp;quot;);&lt;br /&gt;
    System.out&lt;br /&gt;
        .println(&amp;quot; without any involvement from the AddressBookImpl.&amp;quot;);&lt;br /&gt;
    System.out.println(&amp;quot; Now, a call to the method getAllAddresses will&amp;quot;);&lt;br /&gt;
    System.out.println(&amp;quot; force instantiation of AddressBookImpl, and will&amp;quot;);&lt;br /&gt;
    System.out.println(&amp;quot; retrieve ALL addresses that are stored.&amp;quot;);&lt;br /&gt;
    System.out.println();&lt;br /&gt;
    ArrayList addresses = proxy.getAllAddresses();&lt;br /&gt;
    System.out.println(&amp;quot;Addresses retrieved. Addresses currently stored:&amp;quot;);&lt;br /&gt;
    System.out.println(addresses);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
interface Address extends Serializable {&lt;br /&gt;
  public static final String EOL_STRING = System&lt;br /&gt;
      .getProperty(&amp;quot;line.separator&amp;quot;);&lt;br /&gt;
  public static final String SPACE = &amp;quot; &amp;quot;;&lt;br /&gt;
  public static final String COMMA = &amp;quot;,&amp;quot;;&lt;br /&gt;
  public String getAddress();&lt;br /&gt;
  public String getType();&lt;br /&gt;
  public String getDescription();&lt;br /&gt;
  public String getStreet();&lt;br /&gt;
  public String getCity();&lt;br /&gt;
  public String getState();&lt;br /&gt;
  public String getZipCode();&lt;br /&gt;
  public void setType(String newType);&lt;br /&gt;
  public void setDescription(String newDescription);&lt;br /&gt;
  public void setStreet(String newStreet);&lt;br /&gt;
  public void setCity(String newCity);&lt;br /&gt;
  public void setState(String newState);&lt;br /&gt;
  public void setZipCode(String newZip);&lt;br /&gt;
}&lt;br /&gt;
interface AddressBook {&lt;br /&gt;
  public void add(Address address);&lt;br /&gt;
  public ArrayList getAllAddresses();&lt;br /&gt;
  public Address getAddress(String description);&lt;br /&gt;
  public void open();&lt;br /&gt;
  public void save();&lt;br /&gt;
}&lt;br /&gt;
class FileLoader {&lt;br /&gt;
  public static Object loadData(File inputFile) {&lt;br /&gt;
    Object returnValue = null;&lt;br /&gt;
    try {&lt;br /&gt;
      if (inputFile.exists()) {&lt;br /&gt;
        if (inputFile.isFile()) {&lt;br /&gt;
          ObjectInputStream readIn = new ObjectInputStream(&lt;br /&gt;
              new FileInputStream(inputFile));&lt;br /&gt;
          returnValue = readIn.readObject();&lt;br /&gt;
          readIn.close();&lt;br /&gt;
        } else {&lt;br /&gt;
          System.err.println(inputFile + &amp;quot; is a directory.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
      } else {&lt;br /&gt;
        System.err.println(&amp;quot;File &amp;quot; + inputFile + &amp;quot; does not exist.&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
    } catch (ClassNotFoundException exc) {&lt;br /&gt;
      exc.printStackTrace();&lt;br /&gt;
    } catch (IOException exc) {&lt;br /&gt;
      exc.printStackTrace();&lt;br /&gt;
    }&lt;br /&gt;
    return returnValue;&lt;br /&gt;
  }&lt;br /&gt;
  public static void storeData(File outputFile, Serializable data) {&lt;br /&gt;
    try {&lt;br /&gt;
      ObjectOutputStream writeOut = new ObjectOutputStream(&lt;br /&gt;
          new FileOutputStream(outputFile));&lt;br /&gt;
      writeOut.writeObject(data);&lt;br /&gt;
      writeOut.close();&lt;br /&gt;
    } catch (IOException exc) {&lt;br /&gt;
      exc.printStackTrace();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class DataCreator {&lt;br /&gt;
  private static final String DEFAULT_FILE = &amp;quot;data.ser&amp;quot;;&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    String fileName;&lt;br /&gt;
    if (args.length == 1) {&lt;br /&gt;
      fileName = args[0];&lt;br /&gt;
    } else {&lt;br /&gt;
      fileName = DEFAULT_FILE;&lt;br /&gt;
    }&lt;br /&gt;
    serialize(fileName);&lt;br /&gt;
  }&lt;br /&gt;
  public static void serialize(String fileName) {&lt;br /&gt;
    try {&lt;br /&gt;
      serializeToFile(createData(), fileName);&lt;br /&gt;
    } catch (IOException exc) {&lt;br /&gt;
      exc.printStackTrace();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  private static Serializable createData() {&lt;br /&gt;
    ArrayList items = new ArrayList();&lt;br /&gt;
    items.add(new AddressImpl(&amp;quot;Home address&amp;quot;, &amp;quot;1418 Appian Way&amp;quot;,&lt;br /&gt;
        &amp;quot;Pleasantville&amp;quot;, &amp;quot;NH&amp;quot;, &amp;quot;27415&amp;quot;));&lt;br /&gt;
    items.add(new AddressImpl(&amp;quot;Resort&amp;quot;, &amp;quot;711 Casino Ave.&amp;quot;, &amp;quot;Atlantic City&amp;quot;,&lt;br /&gt;
        &amp;quot;NJ&amp;quot;, &amp;quot;91720&amp;quot;));&lt;br /&gt;
    items.add(new AddressImpl(&amp;quot;Vacation spot&amp;quot;, &amp;quot;90 Ka&amp;quot;ahanau Cir.&amp;quot;,&lt;br /&gt;
        &amp;quot;Haleiwa&amp;quot;, &amp;quot;HI&amp;quot;, &amp;quot;41720&amp;quot;));&lt;br /&gt;
    return items;&lt;br /&gt;
  }&lt;br /&gt;
  private static void serializeToFile(Serializable data, String fileName)&lt;br /&gt;
      throws IOException {&lt;br /&gt;
    ObjectOutputStream serOut = new ObjectOutputStream(&lt;br /&gt;
        new FileOutputStream(fileName));&lt;br /&gt;
    serOut.writeObject(data);&lt;br /&gt;
    serOut.close();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class AddressImpl implements Address {&lt;br /&gt;
  private String type;&lt;br /&gt;
  private String description;&lt;br /&gt;
  private String street;&lt;br /&gt;
  private String city;&lt;br /&gt;
  private String state;&lt;br /&gt;
  private String zipCode;&lt;br /&gt;
  public static final String HOME = &amp;quot;home&amp;quot;;&lt;br /&gt;
  public static final String WORK = &amp;quot;work&amp;quot;;&lt;br /&gt;
  public AddressImpl() {&lt;br /&gt;
  }&lt;br /&gt;
  public AddressImpl(String newDescription, String newStreet, String newCity,&lt;br /&gt;
      String newState, String newZipCode) {&lt;br /&gt;
    description = newDescription;&lt;br /&gt;
    street = newStreet;&lt;br /&gt;
    city = newCity;&lt;br /&gt;
    state = newState;&lt;br /&gt;
    zipCode = newZipCode;&lt;br /&gt;
  }&lt;br /&gt;
  public String getType() {&lt;br /&gt;
    return type;&lt;br /&gt;
  }&lt;br /&gt;
  public String getDescription() {&lt;br /&gt;
    return description;&lt;br /&gt;
  }&lt;br /&gt;
  public String getStreet() {&lt;br /&gt;
    return street;&lt;br /&gt;
  }&lt;br /&gt;
  public String getCity() {&lt;br /&gt;
    return city;&lt;br /&gt;
  }&lt;br /&gt;
  public String getState() {&lt;br /&gt;
    return state;&lt;br /&gt;
  }&lt;br /&gt;
  public String getZipCode() {&lt;br /&gt;
    return zipCode;&lt;br /&gt;
  }&lt;br /&gt;
  public void setType(String newType) {&lt;br /&gt;
    type = newType;&lt;br /&gt;
  }&lt;br /&gt;
  public void setDescription(String newDescription) {&lt;br /&gt;
    description = newDescription;&lt;br /&gt;
  }&lt;br /&gt;
  public void setStreet(String newStreet) {&lt;br /&gt;
    street = newStreet;&lt;br /&gt;
  }&lt;br /&gt;
  public void setCity(String newCity) {&lt;br /&gt;
    city = newCity;&lt;br /&gt;
  }&lt;br /&gt;
  public void setState(String newState) {&lt;br /&gt;
    state = newState;&lt;br /&gt;
  }&lt;br /&gt;
  public void setZipCode(String newZip) {&lt;br /&gt;
    zipCode = newZip;&lt;br /&gt;
  }&lt;br /&gt;
  public String toString() {&lt;br /&gt;
    return description;&lt;br /&gt;
  }&lt;br /&gt;
  public String getAddress() {&lt;br /&gt;
    return description + EOL_STRING + street + EOL_STRING + city + COMMA&lt;br /&gt;
        + SPACE + state + SPACE + zipCode + EOL_STRING;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class AddressBookProxy implements AddressBook {&lt;br /&gt;
  private File file;&lt;br /&gt;
  private AddressBookImpl addressBook;&lt;br /&gt;
  private ArrayList localAddresses = new ArrayList();&lt;br /&gt;
  public AddressBookProxy(String filename) {&lt;br /&gt;
    file = new File(filename);&lt;br /&gt;
  }&lt;br /&gt;
  public void open() {&lt;br /&gt;
    addressBook = new AddressBookImpl(file);&lt;br /&gt;
    Iterator addressIterator = localAddresses.iterator();&lt;br /&gt;
    while (addressIterator.hasNext()) {&lt;br /&gt;
      addressBook.add((Address) addressIterator.next());&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public void save() {&lt;br /&gt;
    if (addressBook != null) {&lt;br /&gt;
      addressBook.save();&lt;br /&gt;
    } else if (!localAddresses.isEmpty()) {&lt;br /&gt;
      open();&lt;br /&gt;
      addressBook.save();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public ArrayList getAllAddresses() {&lt;br /&gt;
    if (addressBook == null) {&lt;br /&gt;
      open();&lt;br /&gt;
    }&lt;br /&gt;
    return addressBook.getAllAddresses();&lt;br /&gt;
  }&lt;br /&gt;
  public Address getAddress(String description) {&lt;br /&gt;
    if (!localAddresses.isEmpty()) {&lt;br /&gt;
      Iterator addressIterator = localAddresses.iterator();&lt;br /&gt;
      while (addressIterator.hasNext()) {&lt;br /&gt;
        AddressImpl address = (AddressImpl) addressIterator.next();&lt;br /&gt;
        if (address.getDescription().equalsIgnoreCase(description)) {&lt;br /&gt;
          return address;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if (addressBook == null) {&lt;br /&gt;
      open();&lt;br /&gt;
    }&lt;br /&gt;
    return addressBook.getAddress(description);&lt;br /&gt;
  }&lt;br /&gt;
  public void add(Address address) {&lt;br /&gt;
    if (addressBook != null) {&lt;br /&gt;
      addressBook.add(address);&lt;br /&gt;
    } else if (!localAddresses.contains(address)) {&lt;br /&gt;
      localAddresses.add(address);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class AddressBookImpl implements AddressBook {&lt;br /&gt;
  private File file;&lt;br /&gt;
  private ArrayList addresses = new ArrayList();&lt;br /&gt;
  public AddressBookImpl(File newFile) {&lt;br /&gt;
    file = newFile;&lt;br /&gt;
    open();&lt;br /&gt;
  }&lt;br /&gt;
  public ArrayList getAllAddresses() {&lt;br /&gt;
    return addresses;&lt;br /&gt;
  }&lt;br /&gt;
  public Address getAddress(String description) {&lt;br /&gt;
    Iterator addressIterator = addresses.iterator();&lt;br /&gt;
    while (addressIterator.hasNext()) {&lt;br /&gt;
      AddressImpl address = (AddressImpl) addressIterator.next();&lt;br /&gt;
      if (address.getDescription().equalsIgnoreCase(description)) {&lt;br /&gt;
        return address;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    return null;&lt;br /&gt;
  }&lt;br /&gt;
  public void add(Address address) {&lt;br /&gt;
    if (!addresses.contains(address)) {&lt;br /&gt;
      addresses.add(address);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public void open() {&lt;br /&gt;
    addresses = (ArrayList) FileLoader.loadData(file);&lt;br /&gt;
  }&lt;br /&gt;
  public void save() {&lt;br /&gt;
    FileLoader.storeData(file, addresses);&lt;br /&gt;
  }&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;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Proxy pattern in Java ==&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;
/*&lt;br /&gt;
The Design Patterns Java Companion&lt;br /&gt;
Copyright (C) 1998, by James W. Cooper&lt;br /&gt;
IBM Thomas J. Watson Research Center&lt;br /&gt;
*/&lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import java.awt.Color;&lt;br /&gt;
import java.awt.Dimension;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.Image;&lt;br /&gt;
import java.awt.Label;&lt;br /&gt;
import java.awt.MediaTracker;&lt;br /&gt;
import java.awt.Toolkit;&lt;br /&gt;
import java.awt.event.WindowAdapter;&lt;br /&gt;
import java.awt.event.WindowEvent;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
public class ProxyDisplay extends JFrame {&lt;br /&gt;
  public ProxyDisplay() {&lt;br /&gt;
    super(&amp;quot;Display proxied image&amp;quot;);&lt;br /&gt;
    addWindowListener(new WindowAdapter() {&lt;br /&gt;
      public void windowClosing(WindowEvent e) {&lt;br /&gt;
        System.exit(0);&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    getContentPane().add(p);&lt;br /&gt;
    p.setLayout(new BorderLayout());&lt;br /&gt;
    ImageProxy image = new ImageProxy(&amp;quot;elliott.jpg&amp;quot;, 321, 271);&lt;br /&gt;
    p.add(&amp;quot;Center&amp;quot;, image);&lt;br /&gt;
    p.add(&amp;quot;North&amp;quot;, new Label(&amp;quot;    &amp;quot;));&lt;br /&gt;
    p.add(&amp;quot;West&amp;quot;, new Label(&amp;quot;  &amp;quot;));&lt;br /&gt;
    setSize(370, 350);&lt;br /&gt;
    setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  static public void main(String[] argv) {&lt;br /&gt;
    new ProxyDisplay();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
//==================================&lt;br /&gt;
class ImageProxy extends JPanel implements Runnable {&lt;br /&gt;
  int height, width;&lt;br /&gt;
  MediaTracker tracker;&lt;br /&gt;
  Image img;&lt;br /&gt;
  JFrame frame;&lt;br /&gt;
  Thread imageCheck; //to monitor loading&lt;br /&gt;
  &lt;br /&gt;
  public ImageProxy(String filename, int w, int h) {&lt;br /&gt;
    height = h;&lt;br /&gt;
    width = w;&lt;br /&gt;
    tracker = new MediaTracker(this);&lt;br /&gt;
    img = Toolkit.getDefaultToolkit().getImage(filename);&lt;br /&gt;
    tracker.addImage(img, 0); //watch for image loading&lt;br /&gt;
    imageCheck = new Thread(this);&lt;br /&gt;
    imageCheck.start(); //start 2nd thread monitor&lt;br /&gt;
    //this begins actual image loading&lt;br /&gt;
    try {&lt;br /&gt;
      tracker.waitForID(0, 1);&lt;br /&gt;
    } catch (InterruptedException e) {&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public void paint(Graphics g) {&lt;br /&gt;
    if (tracker.checkID(0)) {&lt;br /&gt;
      height = img.getHeight(frame); //get height&lt;br /&gt;
      width = img.getWidth(frame); //and width&lt;br /&gt;
      g.setColor(Color.lightGray); //erase box&lt;br /&gt;
      g.fillRect(0, 0, width, height);&lt;br /&gt;
      g.drawImage(img, 0, 0, this); //draw loaded image&lt;br /&gt;
    } else {&lt;br /&gt;
      //draw box outlining image if not loaded yet&lt;br /&gt;
      g.setColor(Color.black);&lt;br /&gt;
      g.drawRect(1, 1, width - 2, height - 2);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public Dimension getPreferredSize() {&lt;br /&gt;
    return new Dimension(width, height);&lt;br /&gt;
  }&lt;br /&gt;
  //public int getWidth() {return width;}&lt;br /&gt;
  //public int getHeight(){return height;}&lt;br /&gt;
  &lt;br /&gt;
  public void run() {&lt;br /&gt;
    //this thread monitors image loading&lt;br /&gt;
    //and repaints when done&lt;br /&gt;
    //the 1000 msec is artifically long&lt;br /&gt;
    //to allow demo to display with delay&lt;br /&gt;
    try {&lt;br /&gt;
      Thread.sleep(1000);&lt;br /&gt;
      while (!tracker.checkID(0))&lt;br /&gt;
        Thread.sleep(1000);&lt;br /&gt;
    } catch (Exception e) {&lt;br /&gt;
    }&lt;br /&gt;
    repaint();&lt;br /&gt;
  }&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>