Latest web development tutorials

легкий вес

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

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

введение

Намерение: Используйте совместное использование для поддержки большого количества мелкозернистых объектов.

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

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

Как исправить: Анализ с уникальным идентификационным кодом, если есть в памяти, уникальный идентификационный код выявленных объектов возвращается.

Код ключа: HashMap хранится с этими объектами.

Примеры применения: 1, JAVA в String, если он вернется, если нет , то создать строку , хранящуюся в строке внутри пула буферов.2, база данных пула данных.

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

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

Сценарии использования: 1, система имеет большое количество подобных объектов.2, необходимо объединить сцены.

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

реализация

Мы создадим интерфейсShapeи реализацию классов сущностейкругформа интерфейса. Следующим шагом является определение заводских классовShapeFactory.

ShapeFactoryестькругHashMap, где ключ цветовойкругс именем объекта. Всякий раз, когда запрос получен, это создаст определенный цветовой круг.ShapeFactoryпроверить егоHashMapв объекте круга, если найденные объектыCircle,объект возвращается, в противном случае он будет создан хранится в HashMap для подготовки к последующему использованию нового объекта, и объект возвращается клиенту.

FlyWeightPatternDemo,наше демо , чтобы получить класс использоватьShapeFactoryобъектShape.Он будет передавать информацию(красный / зеленый / синий / черный/ белый) кShapeFactory,он должен получить цвет объекта.

Приспособленец UML диаграмма

Шаг 1

Создайте интерфейс.

Shape.java

Открытый интерфейс Shape {
   недействительным ничья ();
}

Шаг 2

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

Circle.java

Открытый класс Circle реализует Shape {
   частный цвет строки;
   частное INT х;
   частное INT у;
   частный радиус INT;

   общественный круг (цвет String) {
      this.color = цвет;		
   }

   общественного недействительными Setx (INT х) {
      this.x = х;
   }

   общественного недействительными сеты (INT у) {
      this.y = у;
   }

   общественного недействительными setRadius (INT радиус) {
      this.radius = радиус;
   }

   @Override
   общественного недействительными ничья () {
      System.out.println ( "Круг: Draw () [Цвет:" + цветной 
         + ", X:" + х + ", у:" + у + ", радиус:" + радиус);
   }
}

Шаг 3

Создание завода по производству классов объекта сущностей на основе данной информации.

ShapeFactory.java

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

Открытый класс ShapeFactory {
   частный статический окончательный HashMap <String, Shape> circleMap = новый HashMap ();

   общественности статической формы getCircle (цвет String) {
      Круг круг = (круг) circleMap.get (цвет);

      если (круг == NULL) {
         круг = новый круг (цвет);
         circleMap.put (цвет, круг);
         System.out.println ( "Создание круг цвета:" + цвет);
      }
      вернуться круг;
   }
}

Шаг 4

Используйте фабрику для того чтобы получить объект сущности класса, передавая информацию о цвете.

FlyweightPatternDemo.java

Открытый класс FlyweightPatternDemo {
   частные статические финальные Струнные цвета [] = 
      { "Красный", "Зеленый", "Голубой", "Белый", "Черный"};
   государственной статической силы основных (String []) {агдз

      для (INT I = 0; я <20; ++ я) {
         Круг круг = 
            (Круг) ShapeFactory.getCircle (getRandomColor ());
         circle.setX (getRandomX ());
         circle.setY (getRandomY ());
         circle.setRadius (100);
         circle.draw ();
      }
   }
   частных статических строк getRandomColor () {
      возвращающие цвета [(INT) (Math.random () * colors.length)];
   }
   частных статических INT getRandomX () {
      Возвращение (INT) (Math.random () * 100);
   }
   частных статических INT getRandomY () {
      Возвращение (INT) (Math.random () * 100);
   }
}

Шаг 5

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

Создание круг цвет: черный
Круг: Draw () [Цвет: черный, х: 36, у: 71, радиус: 100
Создание круг цвет: зеленый
Круг: Draw () [Цвет: зеленый, х: 27, у: 27, радиус: 100
Создание круг цвет: белый
Круг: Draw () [Цвет: белый, х: 64, у: 10, радиус: 100
Создание круг цвет: красный
Круг: Draw () [Цвет: Красный, х: 15, у: 44, радиус: 100
Круг: Draw () [Цвет: зеленый, х: 19, у: 10, радиус: 100
Круг: Draw () [Цвет: зеленый, х: 94, у: 32, радиус: 100
Круг: Draw () [Цвет: белый, х: 69, у: 98, радиус: 100
Создание круг цвет: синий
Круг: Draw () [Цвет: синий, х: 13, у: 4, радиус: 100
Круг: Draw () [Цвет: зеленый, х: 21, у: 21, радиус: 100
Круг: Draw () [Цвет: синий, х: 55, у: 86, радиус: 100
Круг: Draw () [Цвет: белый, х: 90, у: 70, радиус: 100
Круг: Draw () [Цвет: зеленый, х: 78, у: 3, радиус: 100
Круг: Draw () [Цвет: зеленый, х: 64, у: 89, радиус: 100
Круг: Draw () [Цвет: синий, х: 3, у: 91, радиус: 100
Круг: Draw () [Цвет: синий, х: 62, у: 82, радиус: 100
Круг: Draw () [Цвет: зеленый, х: 97, у: 61, радиус: 100
Круг: Draw () [Цвет: зеленый, х: 86, у: 12, радиус: 100
Круг: Draw () [Цвет: зеленый, х: 38, у: 93, радиус: 100
Круг: Draw () [Цвет: Красный, х: 76, у: 82, радиус: 100
Круг: Draw () [Цвет: синий, х: 95, у: 82, радиус: 100