<?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%2FStrategy_Pattern</id>
		<title>Java/Design Pattern/Strategy 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%2FStrategy_Pattern"/>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java/Design_Pattern/Strategy_Pattern&amp;action=history"/>
		<updated>2026-04-16T03:08:28Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://jexp.ru/index.php?title=Java/Design_Pattern/Strategy_Pattern&amp;diff=7793&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java/Design_Pattern/Strategy_Pattern&amp;diff=7793&amp;oldid=prev"/>
				<updated>2010-06-01T06:50:41Z</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/Strategy_Pattern&amp;diff=7792&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/Strategy_Pattern&amp;diff=7792&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;== Strategy 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;
//[C] 2002 Sun Microsystems, Inc.---&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.text.Collator;&lt;br /&gt;
import java.util.ArrayList;&lt;br /&gt;
import java.util.Arrays;&lt;br /&gt;
import java.util.ruparator;&lt;br /&gt;
public class RunStrategyPattern {&lt;br /&gt;
  public static void main(String[] arguments) {&lt;br /&gt;
    System.out.println(&amp;quot;Example for the Strategy pattern&amp;quot;);&lt;br /&gt;
    System.out.println();&lt;br /&gt;
    System.out&lt;br /&gt;
        .println(&amp;quot;This code uses two Strategy classes, NameSummarizer and OrganizationSummarizer,&amp;quot;);&lt;br /&gt;
    System.out&lt;br /&gt;
        .println(&amp;quot; to provide a sorted, summarized list for a ContactList. The ContactList object&amp;quot;);&lt;br /&gt;
    System.out&lt;br /&gt;
        .println(&amp;quot; maintains a collection of Contacts, and delegates the task of representing&amp;quot;);&lt;br /&gt;
    System.out&lt;br /&gt;
        .println(&amp;quot; its information to an associated object which implements SummarizingStrategy.&amp;quot;);&lt;br /&gt;
    System.out.println();&lt;br /&gt;
    System.out&lt;br /&gt;
        .println(&amp;quot;Deserializing stored ContactList from the data.ser file&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;
    ContactList list = (ContactList) (DataRetriever&lt;br /&gt;
        .deserializeData(&amp;quot;data.ser&amp;quot;));&lt;br /&gt;
    System.out.println(&amp;quot;Creating NameSummarizer for the ContactList&amp;quot;);&lt;br /&gt;
    System.out&lt;br /&gt;
        .println(&amp;quot;(this Strategy displays only the last and first name,&amp;quot;);&lt;br /&gt;
    System.out&lt;br /&gt;
        .println(&amp;quot; and sorts the list by last name, followed by the first)&amp;quot;);&lt;br /&gt;
    list.setSummarizer(new NameSummarizer());&lt;br /&gt;
    System.out.println(&amp;quot;Name Summarizer Output for the ContactList:&amp;quot;);&lt;br /&gt;
    System.out.println(list.summarize());&lt;br /&gt;
    System.out.println();&lt;br /&gt;
    System.out&lt;br /&gt;
        .println(&amp;quot;Creating OrganizationSummarizer for the ContactList&amp;quot;);&lt;br /&gt;
    System.out&lt;br /&gt;
        .println(&amp;quot;(this Strategy displays the organization, followed by the first&amp;quot;);&lt;br /&gt;
    System.out&lt;br /&gt;
        .println(&amp;quot; and last name. It sorts by the organization, followed by last name)&amp;quot;);&lt;br /&gt;
    list.setSummarizer(new OrganizationSummarizer());&lt;br /&gt;
    System.out&lt;br /&gt;
        .println(&amp;quot;Organization Summarizer Output for the ContactList:&amp;quot;);&lt;br /&gt;
    System.out.println(list.summarize());&lt;br /&gt;
    System.out.println();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
interface Contact extends Serializable {&lt;br /&gt;
  public static final String SPACE = &amp;quot; &amp;quot;;&lt;br /&gt;
  public String getFirstName();&lt;br /&gt;
  public String getLastName();&lt;br /&gt;
  public String getTitle();&lt;br /&gt;
  public String getOrganization();&lt;br /&gt;
  public void setFirstName(String newFirstName);&lt;br /&gt;
  public void setLastName(String newLastName);&lt;br /&gt;
  public void setTitle(String newTitle);&lt;br /&gt;
  public void setOrganization(String newOrganization);&lt;br /&gt;
}&lt;br /&gt;
class ContactImpl implements Contact {&lt;br /&gt;
  private String firstName;&lt;br /&gt;
  private String lastName;&lt;br /&gt;
  private String title;&lt;br /&gt;
  private String organization;&lt;br /&gt;
  public ContactImpl() {&lt;br /&gt;
  }&lt;br /&gt;
  public ContactImpl(String newFirstName, String newLastName,&lt;br /&gt;
      String newTitle, String newOrganization) {&lt;br /&gt;
    firstName = newFirstName;&lt;br /&gt;
    lastName = newLastName;&lt;br /&gt;
    title = newTitle;&lt;br /&gt;
    organization = newOrganization;&lt;br /&gt;
  }&lt;br /&gt;
  public String getFirstName() {&lt;br /&gt;
    return firstName;&lt;br /&gt;
  }&lt;br /&gt;
  public String getLastName() {&lt;br /&gt;
    return lastName;&lt;br /&gt;
  }&lt;br /&gt;
  public String getTitle() {&lt;br /&gt;
    return title;&lt;br /&gt;
  }&lt;br /&gt;
  public String getOrganization() {&lt;br /&gt;
    return organization;&lt;br /&gt;
  }&lt;br /&gt;
  public void setFirstName(String newFirstName) {&lt;br /&gt;
    firstName = newFirstName;&lt;br /&gt;
  }&lt;br /&gt;
  public void setLastName(String newLastName) {&lt;br /&gt;
    lastName = newLastName;&lt;br /&gt;
  }&lt;br /&gt;
  public void setTitle(String newTitle) {&lt;br /&gt;
    title = newTitle;&lt;br /&gt;
  }&lt;br /&gt;
  public void setOrganization(String newOrganization) {&lt;br /&gt;
    organization = newOrganization;&lt;br /&gt;
  }&lt;br /&gt;
  public String toString() {&lt;br /&gt;
    return firstName + SPACE + lastName;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class ContactList implements Serializable {&lt;br /&gt;
  private ArrayList contacts = new ArrayList();&lt;br /&gt;
  private SummarizingStrategy summarizer;&lt;br /&gt;
  public ArrayList getContacts() {&lt;br /&gt;
    return contacts;&lt;br /&gt;
  }&lt;br /&gt;
  public Contact[] getContactsAsArray() {&lt;br /&gt;
    return (Contact[]) (contacts.toArray(new Contact[1]));&lt;br /&gt;
  }&lt;br /&gt;
  public void setSummarizer(SummarizingStrategy newSummarizer) {&lt;br /&gt;
    summarizer = newSummarizer;&lt;br /&gt;
  }&lt;br /&gt;
  public void setContacts(ArrayList newContacts) {&lt;br /&gt;
    contacts = newContacts;&lt;br /&gt;
  }&lt;br /&gt;
  public void addContact(Contact element) {&lt;br /&gt;
    if (!contacts.contains(element)) {&lt;br /&gt;
      contacts.add(element);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public void removeContact(Contact element) {&lt;br /&gt;
    contacts.remove(element);&lt;br /&gt;
  }&lt;br /&gt;
  public String summarize() {&lt;br /&gt;
    return summarizer.summarize(getContactsAsArray());&lt;br /&gt;
  }&lt;br /&gt;
  public String[] makeSummarizedList() {&lt;br /&gt;
    return summarizer.makeSummarizedList(getContactsAsArray());&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(makeContactList(), fileName);&lt;br /&gt;
    } catch (IOException exc) {&lt;br /&gt;
      exc.printStackTrace();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  private static Serializable makeContactList() {&lt;br /&gt;
    ContactList list = new ContactList();&lt;br /&gt;
    list.addContact(new ContactImpl(&amp;quot;David&amp;quot;, &amp;quot;St. Hubbins&amp;quot;, &amp;quot;Lead Guitar&amp;quot;,&lt;br /&gt;
        &amp;quot;The New Originals&amp;quot;));&lt;br /&gt;
    list.addContact(new ContactImpl(&amp;quot;Mick&amp;quot;, &amp;quot;Shrimpton&amp;quot;, &amp;quot;Drummer&amp;quot;,&lt;br /&gt;
        &amp;quot;The New Originals&amp;quot;));&lt;br /&gt;
    list.addContact(new ContactImpl(&amp;quot;Nigel&amp;quot;, &amp;quot;Tufnel&amp;quot;, &amp;quot;Lead Guitar&amp;quot;,&lt;br /&gt;
        &amp;quot;The New Originals&amp;quot;));&lt;br /&gt;
    list.addContact(new ContactImpl(&amp;quot;Derek&amp;quot;, &amp;quot;Smalls&amp;quot;, &amp;quot;Bass&amp;quot;,&lt;br /&gt;
        &amp;quot;The New Originals&amp;quot;));&lt;br /&gt;
    list.addContact(new ContactImpl(&amp;quot;Viv&amp;quot;, &amp;quot;Savage&amp;quot;, &amp;quot;Keyboards&amp;quot;,&lt;br /&gt;
        &amp;quot;The New Originals&amp;quot;));&lt;br /&gt;
    list.addContact(new ContactImpl(&amp;quot;Nick&amp;quot;, &amp;quot;Shrimpton&amp;quot;, &amp;quot;CEO&amp;quot;,&lt;br /&gt;
        &amp;quot;Fishy Business, LTD&amp;quot;));&lt;br /&gt;
    list.addContact(new ContactImpl(&amp;quot;Nickolai&amp;quot;, &amp;quot;Lobachevski&amp;quot;,&lt;br /&gt;
        &amp;quot;Senior Packer&amp;quot;, &amp;quot;Fishy Business, LTD&amp;quot;));&lt;br /&gt;
    list.addContact(new ContactImpl(&amp;quot;Alan&amp;quot;, &amp;quot;Robertson&amp;quot;, &amp;quot;Comptroller&amp;quot;,&lt;br /&gt;
        &amp;quot;Universal Exports&amp;quot;));&lt;br /&gt;
    list.addContact(new ContactImpl(&amp;quot;William&amp;quot;, &amp;quot;Telle&amp;quot;, &amp;quot;President&amp;quot;,&lt;br /&gt;
        &amp;quot;Universal Exports&amp;quot;));&lt;br /&gt;
    list.addContact(new ContactImpl(&amp;quot;Harvey&amp;quot;, &amp;quot;Manfredjensenden&amp;quot;,&lt;br /&gt;
        &amp;quot;Inspector&amp;quot;, &amp;quot;Universal Imports&amp;quot;));&lt;br /&gt;
    list.addContact(new ContactImpl(&amp;quot;Deirdre&amp;quot;, &amp;quot;Pine&amp;quot;, &amp;quot;Chief Mechanic&amp;quot;,&lt;br /&gt;
        &amp;quot;The Universal Joint&amp;quot;));&lt;br /&gt;
    list.addContact(new ContactImpl(&amp;quot;Martha&amp;quot;, &amp;quot;Crump-Pinnett&amp;quot;,&lt;br /&gt;
        &amp;quot;Lead Developer&amp;quot;, &amp;quot;Avatar Inc.&amp;quot;));&lt;br /&gt;
    list.addContact(new ContactImpl(&amp;quot;Bryan&amp;quot;, &amp;quot;Basham&amp;quot;, &amp;quot;CTO&amp;quot;, &amp;quot;IOVA&amp;quot;));&lt;br /&gt;
    return list;&lt;br /&gt;
  }&lt;br /&gt;
  private static void serializeToFile(Serializable content, 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(content);&lt;br /&gt;
    serOut.close();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class DataRetriever {&lt;br /&gt;
  public static Object deserializeData(String fileName) {&lt;br /&gt;
    Object returnValue = null;&lt;br /&gt;
    try {&lt;br /&gt;
      File inputFile = new File(fileName);&lt;br /&gt;
      if (inputFile.exists() &amp;amp;&amp;amp; inputFile.isFile()) {&lt;br /&gt;
        ObjectInputStream readIn = new ObjectInputStream(&lt;br /&gt;
            new FileInputStream(fileName));&lt;br /&gt;
        returnValue = readIn.readObject();&lt;br /&gt;
        readIn.close();&lt;br /&gt;
      } else {&lt;br /&gt;
        System.err.println(&amp;quot;Unable to locate the file &amp;quot; + fileName);&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;
}&lt;br /&gt;
class NameSummarizer implements SummarizingStrategy {&lt;br /&gt;
  private Comparator comparator = new NameComparator();&lt;br /&gt;
  public String summarize(Contact[] contactList) {&lt;br /&gt;
    StringBuffer product = new StringBuffer();&lt;br /&gt;
    Arrays.sort(contactList, comparator);&lt;br /&gt;
    for (int i = 0; i &amp;lt; contactList.length; i++) {&lt;br /&gt;
      product.append(contactList[i].getLastName());&lt;br /&gt;
      product.append(COMMA);&lt;br /&gt;
      product.append(SPACE);&lt;br /&gt;
      product.append(contactList[i].getFirstName());&lt;br /&gt;
      product.append(EOL_STRING);&lt;br /&gt;
    }&lt;br /&gt;
    return product.toString();&lt;br /&gt;
  }&lt;br /&gt;
  public String[] makeSummarizedList(Contact[] contactList) {&lt;br /&gt;
    Arrays.sort(contactList, comparator);&lt;br /&gt;
    String[] product = new String[contactList.length];&lt;br /&gt;
    for (int i = 0; i &amp;lt; contactList.length; i++) {&lt;br /&gt;
      product[i] = contactList[i].getLastName() + COMMA + SPACE&lt;br /&gt;
          + contactList[i].getFirstName() + EOL_STRING;&lt;br /&gt;
    }&lt;br /&gt;
    return product;&lt;br /&gt;
  }&lt;br /&gt;
  private class NameComparator implements Comparator {&lt;br /&gt;
    private Collator textComparator = Collator.getInstance();&lt;br /&gt;
    public int compare(Object o1, Object o2) {&lt;br /&gt;
      Contact c1, c2;&lt;br /&gt;
      if ((o1 instanceof Contact) &amp;amp;&amp;amp; (o2 instanceof Contact)) {&lt;br /&gt;
        c1 = (Contact) o1;&lt;br /&gt;
        c2 = (Contact) o2;&lt;br /&gt;
        int compareResult = textComparator.rupare(c1.getLastName(), c2&lt;br /&gt;
            .getLastName());&lt;br /&gt;
        if (compareResult == 0) {&lt;br /&gt;
          compareResult = textComparator.rupare(c1.getFirstName(),&lt;br /&gt;
              c2.getFirstName());&lt;br /&gt;
        }&lt;br /&gt;
        return compareResult;&lt;br /&gt;
      } else&lt;br /&gt;
        return textComparator.rupare(o1, o2);&lt;br /&gt;
    }&lt;br /&gt;
    public boolean equals(Object o) {&lt;br /&gt;
      return textComparator.equals(o);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class OrganizationSummarizer implements SummarizingStrategy {&lt;br /&gt;
  private Comparator comparator = new OrganizationComparator();&lt;br /&gt;
  public String summarize(Contact[] contactList) {&lt;br /&gt;
    StringBuffer product = new StringBuffer();&lt;br /&gt;
    Arrays.sort(contactList, comparator);&lt;br /&gt;
    for (int i = 0; i &amp;lt; contactList.length; i++) {&lt;br /&gt;
      product.append(contactList[i].getOrganization());&lt;br /&gt;
      product.append(DELIMITER);&lt;br /&gt;
      product.append(SPACE);&lt;br /&gt;
      product.append(contactList[i].getFirstName());&lt;br /&gt;
      product.append(SPACE);&lt;br /&gt;
      product.append(contactList[i].getLastName());&lt;br /&gt;
      product.append(EOL_STRING);&lt;br /&gt;
    }&lt;br /&gt;
    return product.toString();&lt;br /&gt;
  }&lt;br /&gt;
  public String[] makeSummarizedList(Contact[] contactList) {&lt;br /&gt;
    Arrays.sort(contactList, comparator);&lt;br /&gt;
    String[] product = new String[contactList.length];&lt;br /&gt;
    for (int i = 0; i &amp;lt; contactList.length; i++) {&lt;br /&gt;
      product[i] = contactList[i].getOrganization() + DELIMITER + SPACE&lt;br /&gt;
          + contactList[i].getFirstName() + SPACE&lt;br /&gt;
          + contactList[i].getLastName() + EOL_STRING;&lt;br /&gt;
    }&lt;br /&gt;
    return product;&lt;br /&gt;
  }&lt;br /&gt;
  private class OrganizationComparator implements Comparator {&lt;br /&gt;
    private Collator textComparator = Collator.getInstance();&lt;br /&gt;
    public int compare(Object o1, Object o2) {&lt;br /&gt;
      Contact c1, c2;&lt;br /&gt;
      if ((o1 instanceof Contact) &amp;amp;&amp;amp; (o2 instanceof Contact)) {&lt;br /&gt;
        c1 = (Contact) o1;&lt;br /&gt;
        c2 = (Contact) o2;&lt;br /&gt;
        int compareResult = textComparator.rupare(&lt;br /&gt;
            c1.getOrganization(), c2.getOrganization());&lt;br /&gt;
        if (compareResult == 0) {&lt;br /&gt;
          compareResult = textComparator.rupare(c1.getLastName(), c2&lt;br /&gt;
              .getLastName());&lt;br /&gt;
        }&lt;br /&gt;
        return compareResult;&lt;br /&gt;
      } else&lt;br /&gt;
        return textComparator.rupare(o1, o2);&lt;br /&gt;
    }&lt;br /&gt;
    public boolean equals(Object o) {&lt;br /&gt;
      return textComparator.equals(o);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
interface SummarizingStrategy {&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 DELIMITER = &amp;quot;:&amp;quot;;&lt;br /&gt;
  public static final String COMMA = &amp;quot;,&amp;quot;;&lt;br /&gt;
  public static final String SPACE = &amp;quot; &amp;quot;;&lt;br /&gt;
  public String summarize(Contact[] contactList);&lt;br /&gt;
  public String[] makeSummarizedList(Contact[] contactList);&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>