<?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%2FDesign_Pattern%2FBridge_Pattern</id>
		<title>Java/Design Pattern/Bridge Pattern - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2FDesign_Pattern%2FBridge_Pattern"/>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/Design_Pattern/Bridge_Pattern&amp;action=history"/>
		<updated>2026-04-22T05:04:39Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java/Design_Pattern/Bridge_Pattern&amp;diff=7799&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/Design_Pattern/Bridge_Pattern&amp;diff=7799&amp;oldid=prev"/>
				<updated>2010-06-01T06:50:43Z</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://www.jexp.ru/index.php?title=Java/Design_Pattern/Bridge_Pattern&amp;diff=7798&amp;oldid=prev</id>
		<title> в 18:01, 31 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/Design_Pattern/Bridge_Pattern&amp;diff=7798&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;== Bridge Pattern 1 ==&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 BridgePatternClient {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    //Create an appropriate implementer object&lt;br /&gt;
    MessageLogger logger = new FileLogger();&lt;br /&gt;
    //Choose required interface object and&lt;br /&gt;
    // configure it with the implementer object&lt;br /&gt;
    Message msg = new EncryptedMessage(logger);&lt;br /&gt;
    msg.log(&amp;quot;Test Message&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class ConsoleLogger implements MessageLogger {&lt;br /&gt;
  public void logMsg(String msg) {&lt;br /&gt;
    System.out.println(msg);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class EncryptedMessage implements Message {&lt;br /&gt;
  private MessageLogger logger;&lt;br /&gt;
  public EncryptedMessage(MessageLogger l) {&lt;br /&gt;
    logger = l;&lt;br /&gt;
  }&lt;br /&gt;
  public void log(String msg) {&lt;br /&gt;
    String str = preProcess(msg);&lt;br /&gt;
    logger.logMsg(str);&lt;br /&gt;
  }&lt;br /&gt;
  private String preProcess(String msg) {&lt;br /&gt;
    msg = msg.substring(msg.length() - 1)&lt;br /&gt;
        + msg.substring(0, msg.length() - 1);&lt;br /&gt;
    return msg;&lt;br /&gt;
  };&lt;br /&gt;
}&lt;br /&gt;
class FileLogger implements MessageLogger {&lt;br /&gt;
  public void logMsg(String msg) {&lt;br /&gt;
    FileUtil futil = new FileUtil();&lt;br /&gt;
    futil.writeToFile(&amp;quot;log.txt&amp;quot;, msg, true, true);&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;
interface Message {&lt;br /&gt;
  public void log(String msg);&lt;br /&gt;
}&lt;br /&gt;
interface MessageLogger {&lt;br /&gt;
  public void logMsg(String msg);&lt;br /&gt;
}&lt;br /&gt;
class TextMessage implements Message {&lt;br /&gt;
  private MessageLogger logger;&lt;br /&gt;
  public TextMessage(MessageLogger l) {&lt;br /&gt;
    logger = l;&lt;br /&gt;
  }&lt;br /&gt;
  public void log(String msg) {&lt;br /&gt;
    String str = preProcess(msg);&lt;br /&gt;
    logger.logMsg(str);&lt;br /&gt;
  }&lt;br /&gt;
  private String preProcess(String msg) {&lt;br /&gt;
    return msg;&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;
== Bridge 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;
&lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import java.awt.Dimension;&lt;br /&gt;
import java.awt.GridLayout;&lt;br /&gt;
import java.awt.event.WindowAdapter;&lt;br /&gt;
import java.awt.event.WindowEvent;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.io.RandomAccessFile;&lt;br /&gt;
import java.util.Vector;&lt;br /&gt;
import javax.swing.AbstractListModel;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JLabel;&lt;br /&gt;
import javax.swing.JList;&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
import javax.swing.JScrollPane;&lt;br /&gt;
import javax.swing.JTable;&lt;br /&gt;
import javax.swing.UIManager;&lt;br /&gt;
import javax.swing.UnsupportedLookAndFeelException;&lt;br /&gt;
import javax.swing.event.ListSelectionEvent;&lt;br /&gt;
import javax.swing.event.ListSelectionListener;&lt;br /&gt;
import javax.swing.event.TableModelListener;&lt;br /&gt;
import javax.swing.table.TableModel;&lt;br /&gt;
public class productDisplay extends JFrame {&lt;br /&gt;
  public productDisplay() {&lt;br /&gt;
    super(&amp;quot;The Java Factory-- Products&amp;quot;);&lt;br /&gt;
    setLF(); //set look and feel&lt;br /&gt;
    setCloseClick(); //set close on window close click&lt;br /&gt;
    InputFile f = new InputFile(&amp;quot;products.txt&amp;quot;);&lt;br /&gt;
    Vector prod = new Vector();&lt;br /&gt;
    //read in product list&lt;br /&gt;
    String s = f.readLine();&lt;br /&gt;
    while (s != null) {&lt;br /&gt;
      prod.addElement(s);&lt;br /&gt;
      s = f.readLine();&lt;br /&gt;
    }&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    getContentPane().add(p);&lt;br /&gt;
    p.setLayout(new GridLayout(1, 2));&lt;br /&gt;
    JPanel pleft = new JPanel();&lt;br /&gt;
    JPanel pright = new JPanel();&lt;br /&gt;
    p.add(pleft);&lt;br /&gt;
    p.add(pright);&lt;br /&gt;
    pleft.setLayout(new BorderLayout());&lt;br /&gt;
    pright.setLayout(new BorderLayout());&lt;br /&gt;
    //add in customer view as list box&lt;br /&gt;
    pleft.add(&amp;quot;North&amp;quot;, new JLabel(&amp;quot;Customer view&amp;quot;));&lt;br /&gt;
    pleft.add(&amp;quot;Center&amp;quot;, new productList(prod));&lt;br /&gt;
    //add in execute view as table&lt;br /&gt;
    pright.add(&amp;quot;North&amp;quot;, new JLabel(&amp;quot;Executive view&amp;quot;));&lt;br /&gt;
    pright.add(&amp;quot;Center&amp;quot;, new productTable(prod));&lt;br /&gt;
    setSize(new Dimension(400, 300));&lt;br /&gt;
    setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
  //-----------------------------------------&lt;br /&gt;
  private void setCloseClick() {&lt;br /&gt;
    //create window listener to respond to window close click&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;
  }&lt;br /&gt;
  //------------------------------------------&lt;br /&gt;
  private void setLF() {&lt;br /&gt;
    // Force SwingApp to come up in the System L&amp;amp;F&lt;br /&gt;
    String laf = UIManager.getSystemLookAndFeelClassName();&lt;br /&gt;
    try {&lt;br /&gt;
      UIManager.setLookAndFeel(laf);&lt;br /&gt;
    } catch (UnsupportedLookAndFeelException exc) {&lt;br /&gt;
      System.err.println(&amp;quot;Warning: UnsupportedLookAndFeel: &amp;quot; + laf);&lt;br /&gt;
    } catch (Exception exc) {&lt;br /&gt;
      System.err.println(&amp;quot;Error loading &amp;quot; + laf + &amp;quot;: &amp;quot; + exc);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  //---------------------------------------------&lt;br /&gt;
  static public void main(String argv[]) {&lt;br /&gt;
    new productDisplay();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class InputFile {&lt;br /&gt;
  RandomAccessFile f = null;&lt;br /&gt;
  boolean errflag;&lt;br /&gt;
  String s = null;&lt;br /&gt;
  public InputFile(String fname) {&lt;br /&gt;
    errflag = false;&lt;br /&gt;
    try {&lt;br /&gt;
      //open file&lt;br /&gt;
      f = new RandomAccessFile(fname, &amp;quot;r&amp;quot;);&lt;br /&gt;
    } catch (IOException e) {&lt;br /&gt;
      //print error if not found&lt;br /&gt;
      System.out.println(&amp;quot;no file found&amp;quot;);&lt;br /&gt;
      errflag = true; //and set flag&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  //-----------------------------------------&lt;br /&gt;
  public boolean checkErr() {&lt;br /&gt;
    return errflag;&lt;br /&gt;
  }&lt;br /&gt;
  //-----------------------------------------&lt;br /&gt;
  public String read() {&lt;br /&gt;
    //read a single field up to a comma or end of line&lt;br /&gt;
    String ret = &amp;quot;&amp;quot;;&lt;br /&gt;
    if (s == null) //if no data in string&lt;br /&gt;
    {&lt;br /&gt;
      s = readLine(); //read next line&lt;br /&gt;
    }&lt;br /&gt;
    if (s != null) //if there is data&lt;br /&gt;
    {&lt;br /&gt;
      s.trim(); //trim off blanks&lt;br /&gt;
      int i = s.indexOf(&amp;quot;,&amp;quot;); //find next comma&lt;br /&gt;
      if (i &amp;lt;= 0) {&lt;br /&gt;
        ret = s.trim(); //if no commas go to end of line&lt;br /&gt;
        s = null; //and null out stored string&lt;br /&gt;
      } else {&lt;br /&gt;
        ret = s.substring(0, i).trim(); //return left of comma&lt;br /&gt;
        s = s.substring(i + 1); //save right of comma&lt;br /&gt;
      }&lt;br /&gt;
    } else&lt;br /&gt;
      ret = null;&lt;br /&gt;
    return ret; //return string&lt;br /&gt;
  }&lt;br /&gt;
  //-----------------------------------------&lt;br /&gt;
  public String readLine() {&lt;br /&gt;
    //read in a line from the file&lt;br /&gt;
    s = null;&lt;br /&gt;
    try {&lt;br /&gt;
      s = f.readLine(); //could throw error&lt;br /&gt;
    } catch (IOException e) {&lt;br /&gt;
      errflag = true;&lt;br /&gt;
      System.out.println(&amp;quot;File read error&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    return s;&lt;br /&gt;
  }&lt;br /&gt;
  //-----------------------------------------&lt;br /&gt;
  public void close() {&lt;br /&gt;
    try {&lt;br /&gt;
      f.close(); //close file&lt;br /&gt;
    } catch (IOException e) {&lt;br /&gt;
      System.out.println(&amp;quot;File close error&amp;quot;);&lt;br /&gt;
      errflag = true;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  //-----------------------------------------&lt;br /&gt;
}&lt;br /&gt;
class productList extends JawtList {&lt;br /&gt;
  public productList(Vector products) {&lt;br /&gt;
    super(products.size()); //for compatibility&lt;br /&gt;
    for (int i = 0; i &amp;lt; products.size(); i++) {&lt;br /&gt;
      //take each strig apart and keep only&lt;br /&gt;
      //the product names, discarding the quntities&lt;br /&gt;
      String s = (String) products.elementAt(i);&lt;br /&gt;
      int index = s.indexOf(&amp;quot;--&amp;quot;); //separate qty from name&lt;br /&gt;
      if (index &amp;gt; 0)&lt;br /&gt;
        add(s.substring(0, index));&lt;br /&gt;
      else&lt;br /&gt;
        add(s);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class productTable extends JScrollPane {&lt;br /&gt;
  JTable table;&lt;br /&gt;
  public productTable(Vector list) {&lt;br /&gt;
    table = new JTable(new prodModel(list));&lt;br /&gt;
    getViewport().add(table);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class prodModel implements TableModel {&lt;br /&gt;
  int rows, columns;&lt;br /&gt;
  Vector prodNames, quantities;&lt;br /&gt;
  public prodModel(Vector products) {&lt;br /&gt;
    rows = products.size();&lt;br /&gt;
    columns = 2;&lt;br /&gt;
    prodNames = new Vector();&lt;br /&gt;
    quantities = new Vector();&lt;br /&gt;
    for (int i = 0; i &amp;lt; products.size(); i++) {&lt;br /&gt;
      String s = (String) products.elementAt(i);&lt;br /&gt;
      int index = s.indexOf(&amp;quot;--&amp;quot;); //separate qty from name&lt;br /&gt;
      if (index &amp;gt; 0) {&lt;br /&gt;
        prodNames.addElement(s.substring(0, index));&lt;br /&gt;
        quantities.addElement(s.substring(index + 2).trim());&lt;br /&gt;
      } else&lt;br /&gt;
        prodNames.addElement(s);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public int getColumnCount() {&lt;br /&gt;
    return columns;&lt;br /&gt;
  }&lt;br /&gt;
  public int getRowCount() {&lt;br /&gt;
    return rows;&lt;br /&gt;
  }&lt;br /&gt;
  public Object getValueAt(int r, int c) {&lt;br /&gt;
    switch (c) {&lt;br /&gt;
    case 0:&lt;br /&gt;
      return prodNames.elementAt(r);&lt;br /&gt;
    case 1:&lt;br /&gt;
      return quantities.elementAt(r);&lt;br /&gt;
    default:&lt;br /&gt;
      return prodNames.elementAt(r);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public Class getColumnClass(int c) {&lt;br /&gt;
    return (new String(&amp;quot;&amp;quot;)).getClass();&lt;br /&gt;
  }&lt;br /&gt;
  public boolean isCellEditable(int r, int c) {&lt;br /&gt;
    return false;&lt;br /&gt;
  }&lt;br /&gt;
  public String getColumnName(int c) {&lt;br /&gt;
    return &amp;quot;&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  public void setValueAt(Object obj, int r, int c) {&lt;br /&gt;
  }&lt;br /&gt;
  public void addTableModelListener(TableModelListener tbm) {&lt;br /&gt;
  }&lt;br /&gt;
  public void removeTableModelListener(TableModelListener tbm) {&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
//this is a simple adapter class to&lt;br /&gt;
//convert List awt methods to Swing methods&lt;br /&gt;
class JawtList extends JScrollPane implements ListSelectionListener, awtList {&lt;br /&gt;
  private JList listWindow;&lt;br /&gt;
  private JListData listContents;&lt;br /&gt;
  //-----------------------------------------&lt;br /&gt;
  public JawtList(int rows) {&lt;br /&gt;
    listContents = new JListData();&lt;br /&gt;
    listWindow = new JList(listContents);&lt;br /&gt;
    listWindow.setPrototypeCellValue(&amp;quot;Abcdefg Hijkmnop&amp;quot;);&lt;br /&gt;
    getViewport().add(listWindow);&lt;br /&gt;
  }&lt;br /&gt;
  //-----------------------------------------&lt;br /&gt;
  public void add(String s) {&lt;br /&gt;
    listContents.addElement(s);&lt;br /&gt;
  }&lt;br /&gt;
  //-----------------------------------------&lt;br /&gt;
  public void remove(String s) {&lt;br /&gt;
    listContents.removeElement(s);&lt;br /&gt;
  }&lt;br /&gt;
  //-----------------------------------------&lt;br /&gt;
  public String[] getSelectedItems() {&lt;br /&gt;
    Object[] obj = listWindow.getSelectedValues();&lt;br /&gt;
    String[] s = new String[obj.length];&lt;br /&gt;
    for (int i = 0; i &amp;lt; obj.length; i++)&lt;br /&gt;
      s[i] = obj[i].toString();&lt;br /&gt;
    return s;&lt;br /&gt;
  }&lt;br /&gt;
  //-----------------------------------------&lt;br /&gt;
  public void valueChanged(ListSelectionEvent e) {&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
//  =========================================&lt;br /&gt;
class JListData extends AbstractListModel {&lt;br /&gt;
  private Vector data;&lt;br /&gt;
  //-----------------------------------------&lt;br /&gt;
  public JListData() {&lt;br /&gt;
    data = new Vector();&lt;br /&gt;
  }&lt;br /&gt;
  //-----------------------------------------&lt;br /&gt;
  public int getSize() {&lt;br /&gt;
    return data.size();&lt;br /&gt;
  }&lt;br /&gt;
  //-----------------------------------------&lt;br /&gt;
  public Object getElementAt(int index) {&lt;br /&gt;
    return data.elementAt(index);&lt;br /&gt;
  }&lt;br /&gt;
  //-----------------------------------------&lt;br /&gt;
  public void addElement(String s) {&lt;br /&gt;
    data.addElement(s);&lt;br /&gt;
    fireIntervalAdded(this, data.size() - 1, data.size());&lt;br /&gt;
  }&lt;br /&gt;
  //-----------------------------------------&lt;br /&gt;
  public void removeElement(String s) {&lt;br /&gt;
    data.removeElement(s);&lt;br /&gt;
    fireIntervalRemoved(this, 0, data.size());&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
interface awtList {&lt;br /&gt;
  public void add(String s);&lt;br /&gt;
  public void remove(String s);&lt;br /&gt;
  public String[] getSelectedItems();&lt;br /&gt;
}&lt;br /&gt;
//products.txt&lt;br /&gt;
/*&lt;br /&gt;
Brass plated widgets --1,000,076&lt;br /&gt;
Furled frammis       --75,000&lt;br /&gt;
Detailed rat brushes --700&lt;br /&gt;
Zero-based hex dumps--80,000&lt;br /&gt;
Anterior antelope collars --578&lt;br /&gt;
Washable softwear --789,000&lt;br /&gt;
Steel-toed wing-tips --456,666&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;
== Bridge Pattern in Java 3 ==&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;
import java.util.ArrayList;&lt;br /&gt;
public class RunBridgePattern {&lt;br /&gt;
    public static void main(String [] arguments){&lt;br /&gt;
        System.out.println(&amp;quot;Example for the Bridge pattern&amp;quot;);&lt;br /&gt;
        System.out.println();&lt;br /&gt;
        System.out.println(&amp;quot;This example divides complex behavior among two&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot; classes - the abstraction and the implementation.&amp;quot;);&lt;br /&gt;
        System.out.println();&lt;br /&gt;
        System.out.println(&amp;quot;In this case, there are two classes which can provide the&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot; abstraction - BaseList and OrnamentedList. The BaseList&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot; provides core funtionality, while the OrnamentedList&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot; expands on the model by adding a list character.&amp;quot;);&lt;br /&gt;
        System.out.println();&lt;br /&gt;
        System.out.println(&amp;quot;The OrderedListImpl class provides the underlying storage&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot; capability for the list, and can be flexibly paired with&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot; either of the classes which provide the abstraction.&amp;quot;);&lt;br /&gt;
        &lt;br /&gt;
        System.out.println(&amp;quot;Creating the OrderedListImpl object.&amp;quot;);&lt;br /&gt;
        ListImpl implementation = new OrderedListImpl();&lt;br /&gt;
        &lt;br /&gt;
        System.out.println(&amp;quot;Creating the BaseList object.&amp;quot;);&lt;br /&gt;
        BaseList listOne = new BaseList();&lt;br /&gt;
        listOne.setImplementor(implementation);&lt;br /&gt;
        System.out.println();&lt;br /&gt;
        &lt;br /&gt;
        System.out.println(&amp;quot;Adding elements to the list.&amp;quot;);&lt;br /&gt;
        listOne.add(&amp;quot;One&amp;quot;);&lt;br /&gt;
        listOne.add(&amp;quot;Two&amp;quot;);&lt;br /&gt;
        listOne.add(&amp;quot;Three&amp;quot;);&lt;br /&gt;
        listOne.add(&amp;quot;Four&amp;quot;);&lt;br /&gt;
        System.out.println();&lt;br /&gt;
        &lt;br /&gt;
        System.out.println(&amp;quot;Creating an OrnamentedList object.&amp;quot;);&lt;br /&gt;
        OrnamentedList listTwo = new OrnamentedList();&lt;br /&gt;
        listTwo.setImplementor(implementation);&lt;br /&gt;
        listTwo.setItemType(&amp;quot;+&amp;quot;);&lt;br /&gt;
        System.out.println();&lt;br /&gt;
        &lt;br /&gt;
        System.out.println(&amp;quot;Creating an NumberedList object.&amp;quot;);&lt;br /&gt;
        NumberedList listThree = new NumberedList();&lt;br /&gt;
        listThree.setImplementor(implementation);&lt;br /&gt;
        System.out.println();&lt;br /&gt;
        &lt;br /&gt;
        System.out.println(&amp;quot;Printing out first list (BaseList)&amp;quot;);&lt;br /&gt;
        for (int i = 0; i &amp;lt; listOne.count(); i++){&lt;br /&gt;
            System.out.println(&amp;quot;\t&amp;quot; + listOne.get(i));&lt;br /&gt;
        }&lt;br /&gt;
        System.out.println();&lt;br /&gt;
        &lt;br /&gt;
        System.out.println(&amp;quot;Printing out second list (OrnamentedList)&amp;quot;);&lt;br /&gt;
        for (int i = 0; i &amp;lt; listTwo.count(); i++){&lt;br /&gt;
            System.out.println(&amp;quot;\t&amp;quot; + listTwo.get(i));&lt;br /&gt;
        }&lt;br /&gt;
        System.out.println();&lt;br /&gt;
        &lt;br /&gt;
        System.out.println(&amp;quot;Printing our third list (NumberedList)&amp;quot;);&lt;br /&gt;
        for (int i = 0; i &amp;lt; listThree.count(); i++){&lt;br /&gt;
            System.out.println(&amp;quot;\t&amp;quot; + listThree.get(i));&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
interface ListImpl{&lt;br /&gt;
    public void addItem(String item);&lt;br /&gt;
    public void addItem(String item, int position);&lt;br /&gt;
    public void removeItem(String item);&lt;br /&gt;
    public int getNumberOfItems();&lt;br /&gt;
    public String getItem(int index);&lt;br /&gt;
    public boolean supportsOrdering();&lt;br /&gt;
}&lt;br /&gt;
class BaseList{&lt;br /&gt;
    protected ListImpl implementor;&lt;br /&gt;
    &lt;br /&gt;
    public void setImplementor(ListImpl impl){&lt;br /&gt;
        implementor = impl;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void add(String item){&lt;br /&gt;
        implementor.addItem(item);&lt;br /&gt;
    }&lt;br /&gt;
    public void add(String item, int position){&lt;br /&gt;
        if (implementor.supportsOrdering()){&lt;br /&gt;
            implementor.addItem(item, position);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void remove(String item){&lt;br /&gt;
        implementor.removeItem(item);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public String get(int index){&lt;br /&gt;
        return implementor.getItem(index);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public int count(){&lt;br /&gt;
        return implementor.getNumberOfItems();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
class NumberedList extends BaseList{&lt;br /&gt;
    public String get(int index){&lt;br /&gt;
        return (index + 1) + &amp;quot;. &amp;quot; + super.get(index);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
class OrderedListImpl implements ListImpl{&lt;br /&gt;
    private ArrayList items = new ArrayList();&lt;br /&gt;
    &lt;br /&gt;
    public void addItem(String item){&lt;br /&gt;
        if (!items.contains(item)){&lt;br /&gt;
            items.add(item);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    public void addItem(String item, int position){&lt;br /&gt;
        if (!items.contains(item)){&lt;br /&gt;
            items.add(position, item);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void removeItem(String item){&lt;br /&gt;
        if (items.contains(item)){&lt;br /&gt;
            items.remove(items.indexOf(item));&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public boolean supportsOrdering(){&lt;br /&gt;
        return true;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public int getNumberOfItems(){&lt;br /&gt;
        return items.size();&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public String getItem(int index){&lt;br /&gt;
        if (index &amp;lt; items.size()){&lt;br /&gt;
            return (String)items.get(index);&lt;br /&gt;
        }&lt;br /&gt;
        return null;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
class OrnamentedList extends BaseList{&lt;br /&gt;
    private char itemType;&lt;br /&gt;
    &lt;br /&gt;
    public char getItemType(){ return itemType; }&lt;br /&gt;
    public void setItemType(char newItemType){&lt;br /&gt;
        if (newItemType &amp;gt; &amp;quot; &amp;quot;){&lt;br /&gt;
            itemType = newItemType;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public String get(int index){&lt;br /&gt;
        return itemType + &amp;quot; &amp;quot; + super.get(index);&lt;br /&gt;
    }&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>