В этой статье описывается внедрение функций шахматных игр Gozi, основанных на режиме Java Xiangyuan. Поделитесь этим для вашей ссылки, следующим образом:
1. Определение шаблона
Наслаждайтесь мировым режимом эффективно поддерживает большое количество мелкозернистых объектов по общему количеству. Уменьшите потребление производительности системы Создание экземпляров объектов, мультиплексируя существующие объекты в памяти. Английский Xianguan-это вес в полусреднем весе, что означает особенно маленький объект, то есть мелкозернистый объект.
2. Примеры модели
1. Анализ шаблона
Мы заимствуем игру Gozi, чтобы проиллюстрировать этот шаблон.
2. Статическая классная диаграмма наслаждения режимом Юань
3. Пример кода
3.1 Создание абстрактного шахмата
пакет com.demo.flyweight.object; открытый абстрактный класс AbstractChessman {// Координаты шахматной бумаги защищены int x; защищенный интенсивность; // категория шахматной бумаги (черная | белая) защищенные шахматы струны; Public AbstractChessman (String Chess) {this.chess = шахматы; } // точечные координаты устанавливают публичную абстрактную точку void (int x, int y); // Показать информацию о шахматной бумаге public void show () {system.out.println (this.chess + "(" + this.x + "," + this.y + ")"); }}3.2 Создание Blackchessman
пакет com.demo.flyweight.object; открытый класс BlackChessman расширяет AbstractChessman { / ** * Конструктор инициализирует черного шахмата * / public blackchessman () {super ("●"); System.out.println ("-BlackChessman Construction Exec !!!); } // Настройка координаты точки @Override public void point (int x, int y) {this.x = x; this.y = y; // показать шахматное содержимое Show (); }}3.3 Создайте Whitechessman
пакет com.demo.flyweight.object; открытый класс Whitechessman расширяет AbstractChessman { / ** * Конструктор инициализирует белый шахмат * / public Whitechessman () {super ("○"); System.out.println ("-Whitechessman Construction Exec !!!); } // Настройка координаты точки @Override public void point (int x, int y) {this.x = x; this.y = y; // Показать шахматное содержимое Show (); }}3.4 Создать фабрику шахматного человека
Пакет com.demo.flyweight.factory; import java.util.hashtable; import com.demo.flyweight.object.abstractchessman; import com.demo.flyween.object.blackchessman; import com.demo.flyweight.object.whitechessman; public classemessmanfactore {//semeleon patternfactor fiveChessmanFactory = new FiveChessManFactory (); // кэш для хранения общих объектов частные финальные хэштаблируемые <символ, AbstractChessman> Cache = New Hashtable <Характер, AbstractChessman> (); // Приватизация конструктора private fivechessmanfactory () {} // Получить синглтонский фабрик общественного статического fivechessmanfactory getInstance () {return fivechessmanfactory; } / ** * Получить шахматные произведения на основе символов * * @param c * (b: черный шахмат: белый шахмат) * @return * / public abstractchessman getchessmanobject (char c) {// Получить экземпляр объекта Pawn от cache AbstractChessman AbstractChessMan = this.Cache.get (c); if (AbstractChessman == null) {// Если в кэше нет информации о экземпляре объекта Pawn, создайте экземпляр объекта Pawn и положите его в кэш -переключатель (C) {case 'B': AbstractChessman = new BlackChessman (); перерыв; Case 'W': AbstractChessman = new Whitechessman (); перерыв; по умолчанию: перерыв; } // Чтобы не допустить входа незаконных символов NULL if (AbstractChessman! = Null) {// plot this.cache.put (c, AbstractChessman); }} // Если в кэше есть шахматный объект, верните непосредственно AbstractChessman; }}3.5 Реализация клиента
Пакет com.demo; import java.util.random; import com.demo.flyweary.factory.fivechessmanfactor FiveChessManforty fiveChessmanFactory = fiveChessmanFactory .getInstance (); Случайный случайный = new Random (); int Radom = 0; AbstractChessman AbstractChessman = NULL; // Получите шахматную часть для (int i = 0; i <10; i ++) {radom = random.nextint (2); Switch (radom) {// Получить черный шахматный случай 0: AbstractChessman = fiveChessmanFactory.getCessManObject ('b'); перерыв; // Получить белый шахматный случай 1: AbstractChessman = fiveChessmanFactory.getCessManObject ('w'); перерыв; } if (AbstractChessman! = null) {AbstractChessman.point (i, random.nextint (15)); }}}}4. Результаты работы
-Whitechessman Construction Exec !!!
○ (0,2)
○ (1,6)
-Blackchessman Construction Exec !!!
● (2,3)
○ (3,14)
○ (4,13)
○ (5,8)
● (6,14)
● (7,0)
● (8,3)
○ (9,8)
3. Два состояния режима удовольствия
Внутреннее состояние : оно не будет изменяться при изменении окружающей среды, оно хранится во внутреннем состоянии информации об заинтернском объекте. Это внутреннее состояние может быть разделено. Для любого заинтерного объекта его значение точно такое же. Точно так же, как «Черные части» и «белые кусочки» в Годжи, государство, которое оно представляет, является внутренним состоянием.
Внешнее состояние : оно изменится с изменением окружающей среды, поэтому не может делиться государством. Для разных объектов рода его значения могут быть разными. Внешнее состояние объекта Сянгюанна должно быть сохранено клиентом. После того, как объект Xiangyuan будет создан и необходимо использовать, он будет передаваться в объект Сяньгьюана. Точно так же, как информация о позиции Гози, представленное состояние является внешним состоянием объекта экологии.
Следовательно, внешние и внутренние состояния Сяньгьюана являются двумя независимыми государствами и не имеют связи друг с другом.
IV Принципы дизайна этой модели
1. Поделитесь мелкозернистыми объектами, чтобы уменьшить пространство памяти.
2. Эффективно изолировать изменяющиеся части и неизменные части системы.
5. Используйте случаи
1. Когда есть много экземпляров определенного типа объекта в системе.
2. В дизайне системы, после классификации экземпляров объектов, пришло время обнаружить, что существует мало реальных категорий.
6. Статическая классовая диаграмма наслаждения режимом Юань
Для получения дополнительной информации об алгоритмах Java, читатели, которые заинтересованы в этом сайте, могут просмотреть темы: «Учебное пособие по структуре данных Java и алгоритм», «Сводка операции Java Dom Node», «Сводка Java File и каталог
Я надеюсь, что эта статья будет полезна для всех Java Programming.