четверг, 10 марта 2011 г.

Абстрактная фабрика

Обеспечивает общий способ создания родственных или связанных объектов без указания конкретных классов:
public class app
{
 public static void main(String[] args)
 {
  Secretar secretar=new Secretar();
  DocumentFactory factory=new MSOFactory();
  secretar.setDocumentFactory(factory);
  secretar.makeTableDocument().print();
  secretar.makeTextDocument().print();
  factory=new OOOFactory();
  secretar.setDocumentFactory(factory);
  secretar.makeTableDocument().print();
  secretar.makeTextDocument().print();
      
  
 }
}
class Secretar // - Client
{
 private DocumentFactory docFactory;
 public void setDocumentFactory(DocumentFactory factory)
 {
  this.docFactory=factory;
 }
 public TextDocument makeTextDocument()
 {
  return docFactory.createTextDocument();
 }
 public TableDocument makeTableDocument()
 {
  return docFactory.createTableDocument();
 }
}
abstract class DocumentFactory
{
 abstract TextDocument createTextDocument();
 abstract TableDocument createTableDocument();
}
abstract class TextDocument
{
  abstract void print();
}
abstract class TableDocument
{
  abstract void print();
}
class WordDocument extends TextDocument
{
 public void print(){ System.out.println("MS Word Document");}
}
class ExcelDocument extends TableDocument
{
 public void print(){ System.out.println("MS Excel Table");}
}
class OpenDocument extends TextDocument
{
 public void print(){ System.out.println("Open Office Document");}
}
class OpenTableDocument extends TableDocument
{
 public void print(){ System.out.println("Open Office Table");}
}
class MSOFactory extends DocumentFactory
{

 public TextDocument createTextDocument()
 {
  return new WordDocument();
 }
 public TableDocument createTableDocument()
 {
  return new ExcelDocument();
 }
}
class OOOFactory extends DocumentFactory
{

 public TextDocument createTextDocument()
 {
  return new OpenDocument();
 }
 public TableDocument createTableDocument()
 {
  return new OpenTableDocument();
 }
}

Комментариев нет:

Отправить комментарий