Latest web development tutorials

Прототип модели

Прототип модели (прототип шаблон) используется для создания дубликата объекта, обеспечивая при этом производительность. Этот тип шаблонов проектирования принадлежат создать схему, которая обеспечивает лучший способ для создания объектов.

Эта модель представляет собой интерфейс прототип, который используется, чтобы создать клон текущего объекта. Когда прямые затраты на создание объекта относительно велико, то с помощью этой модели. Например, объект должен быть создан после того, как база данных является дорогостоящей операцией. Мы можем кэшировать объект в следующий раз запрос, чтобы вернуться к своему клону, время, необходимое для обновления базы данных, в целях сокращения обращений к базе данных.

введение

Намерение: Прототип используется для создания экземпляров указанных типов объектов, а также создавать новые объекты путем копирования прототипа.

Восновном для решения: создание и удаление прототипа во время выполнения.

Когда использовать: 1, когда система должна быть независимой от ее создания продукта, состава и представления.2, когда экземпляр класса должен быть определен во время выполнения, например, путем динамической нагрузки. 3, для того, чтобы избежать создания параллельной иерархии классов и иерархии продукта, когда класс фабрики. 4, когда экземпляр класса может иметь несколько различных комбинаций состояния в одно время. Установите соответствующее число прототипов и клонировать их может быть более удобным, чем руководство каждый раз с соответствующим состоянием экземпляра класса.

Как решить: использование существующего объекта - прототипа, и быстро создавать объект - прототип в качестве экземпляра.

Код ключа: 1, для достижения клонирования операции, JAVA наследования Cloneable, переписать клон (), может быть использован в классе .NET Object MemberwiseClone () метод для достижения объекта мелкой копирования или сериализации способом достижения глубокой копии.2, та же модель, прототип для соединения между пользователем и определенный тип (тип переменной) изоляции между объектом класса, он также требует, чтобы эти "тип переменной" имеет стабильный интерфейс.

Примеры применения: 1 деление клеток.2, JAVA в методе клонирования (Object).

Преимущества: 1, производительность повышается.2 избежать ограничений конструктора.

Недостатки: 1, с методом клонирования необходимо учитывать класс функций, который новый класс не сложно, но для существующих классов не может быть очень легко, особенно , когда ссылка на класс не поддерживает сериализацию косвенного объекта, или циклическую структуру, содержащую ссылку на время.2, должен реализовывать интерфейс Cloneable. 3, во избежание ограничений конструктора.

Сценарии использования: 1, сценарии оптимизации ресурсов.2, инициализация класса нужно переварить много ресурсов, в том числе данных о ресурсах, аппаратных ресурсов. 3, производительность и требования к безопасности сцены. 4, путем создания нового объекта требует очень утомительной подготовки или данных доступа, вы можете использовать прототип модели. 5, множество объектов, модифицированных сцены. 6, объект должен обеспечить доступ к другим объектам, и каждый абонент может понадобиться изменить его значение, рассмотреть вопрос об использовании модели прототипа для нескольких копий объектов, используемых абонентом. 7, в реальном проекте, модель прототипа редко встречаются в одиночку, и фабричный метод обычно появляются вместе, создать метод клонирования объекта, а затем подается к абоненту по заводским способом. И прототип модели Java была включена как единое целое, она легко может быть использован для использования.

Примечание: С класс инстанцировании построить новый объект отличается, модель прототипа для создания нового объекта путем копирования существующего объекта.Малая копия понимают Cloneable, переписать, глубокая копия считывается двоичный поток путем реализации Serializable.

реализация

Мы создадим абстрактный классShapeи расширяет классы сущностей классаShape.Следующим шагом является определение классаShapeCache,форма таких объектов хранится вHashtableв, и в момент запроса , чтобы вернуться к своим клонам.

PrototypPatternDemo,наши демонстрационные классы , использующие классShapeCache, чтобы получить объектShape.

Прототип модели UML диаграмма

Шаг 1

Создать абстрактный класс , который реализует интерфейсКлонируемый.

Shape.java

общественного абстрактного класса Shape реализует Cloneable {
   
   частный идентификатор строки;
   защищенного типа Строка;
   
   абстрактной юридической силы ничья ();
   
   Строка GetType общественности () {
      тип возвращаемого значения;
   }
   
   Строка GetId общественности () {
      вернуть идентификатор;
   }
   
   общественного недействительными SETID (String ID) {
      this.id = ID;
   }
   
   клон общественного объекта () {
      Объект клон = NULL;
      попробуйте {
         клон = super.clone ();
      } Поймайте (CloneNotSupportedException е) {
         e.printStackTrace ();
      }
      возвращать клон;
   }
}

Шаг 2

Создание классов сущностей выше расширяет абстрактный класс.

Rectangle.java

Открытый класс Rectangle Shape расширяет {

   Прямоугольник общественности () {
     тип = "Прямоугольник";
   }

   @Override
   общественного недействительными ничья () {
      ( "Метод Внутри Прямоугольник :: ничья ().") System.out.println;
   }
}

Square.java

Открытый класс Square расширяет Shape {

   общественная площадь () {
     тип = "квадрат";
   }

   @Override
   общественного недействительными ничья () {
      ( "Метод Внутри площади :: ничья ().") System.out.println;
   }
}

Circle.java

Открытый класс Circle расширяет Shape {

   общественный круг () {
     тип = "круг";
   }

   @Override
   общественного недействительными ничья () {
      ( "Метод Внутри круга :: ничья ().") System.out.println;
   }
}

Шаг 3

Создайте класс, получить классы сущностей из базы данных, и сохраняет их вHashtableв.

ShapeCache.java

импорт java.util.Hashtable;

Открытый класс ShapeCache {
	
   частных статических Hashtable <String, Shape> shapeMap 
      = Новый Hashtable <String, Shape> ();

   общественности статической формы getShape (String shapeId) {
      Форма cachedShape = shapeMap.get (shapeId);
      возврат (Shape) cachedShape.clone ();
   }

   // Для каждого запроса к базе данных формы запуска, и создать форму // shapeMap.put (shapeKey, форма);
   // Например, мы хотим добавить три формы государственной статической силы loadCache () {
      Круг круг = новый круг ();
      circle.setId ( "1");
      shapeMap.put (circle.getId (), круг);

      Квадратная площадь = новая площадь ();
      square.setId ( "2");
      shapeMap.put (square.getId (), квадрат);

      Прямоугольник Rectangle = новый прямоугольник ();
      rectangle.setId ( "3");
      shapeMap.put (rectangle.getId (), прямоугольник);
   }
}

Шаг 4

PrototypePatternDemoиспользовать классShapeCache, чтобы получить форму клона хранится вHashtable.

PrototypePatternDemo.java

Открытый класс PrototypePatternDemo {
   государственной статической силы основных (String []) {агдз
      ShapeCache.loadCache ();

      Форма clonedShape = (Shape) ShapeCache.getShape ( "1");
      System.out.println ( "Форма:" + clonedShape.getType ());		

      Форма clonedShape2 = (Shape) ShapeCache.getShape ( "2");
      System.out.println ( "Форма:" + clonedShape2.getType ());		

      Форма clonedShape3 = (Shape) ShapeCache.getShape ( "3");
      System.out.println ( "Форма:" + clonedShape3.getType ());		
   }
}

Шаг 5

Проверьте выход.

Форма: Круг
Форма: площадь
Форма: Прямоугольник