- •724 Содержание
- •Глава 6. Интерфейсы и внутренние классы 139
- •У казания и ответы
- •Вопрос 3.2.
- •Вопрос 8.2.
- •Вопрос 8.3.
- •Вопрос 14.2.
- •Вопрос 21.5.
- •Ч асть 1. Основы языка java
- •Глава 1 введение в классы и объекты Основные понятия ооп
- •Язык Java
- •Нововведения версий 5.0 и 6.0
- •Простое приложение
- •Классы и объекты
- •Сравнение объектов
- •Консоль
- •Простой апплет
- •Задания к главе 1 Вариант a
- •Вариант b
- •Тестовые задания к главе 1
- •Вопрос 1.5.
- •Г лава 2 типы данных и операторы
- •Базовые типы данных и литералы
- •Документирование кода
- •Операторы
- •Классы-оболочки
- •Операторы управления
- •Массивы
- •Класс Маth
- •Управление приложением
- •Задания к главе 2 Вариант a
- •Вариант в
- •Тестовые задания к главе 2
- •Переменные класса и константы
- •Ограничение доступа
- •Конструкторы
- •Статические методы и поля
- •Модификатор final
- •Абстрактные методы
- •Модификатор native
- •Модификатор synchronized
- •Логические блоки
- •Перегрузка методов
- •Параметризованные классы
- •Параметризованные методы
- •Методы с переменным числом параметров
- •Перечисления
- •1 : Fpmi : Балаганов
- •Аннотации
- •Задания к главе 3 Вариант a
- •Вариант b
- •Тестовые задания к главе 3
- •Использование final
- •Использование super и this
- •Переопределение методов и полиморфизм
- •Методы подставки
- •Полиморфизм и расширяемость
- •Статические методы и полиморфизм
- •Абстракция и абстрактные классы
- •Класс Object
- •Клонирование объектов
- •“Сборка мусора” и освобождение ресурсов
- •Задания к главе 4 Вариант a
- •Вариант в
- •Тестовые задания к главе 4
- •Вопрос 4.7.
- •Г лава 5 проектирование классов Шаблоны проектирования grasp
- •Шаблон Expert
- •Шаблон Creator
- •Шаблон Low Coupling
- •Шаблон High Cohesion
- •Шаблон Controller
- •Шаблоны проектирования GoF
- •Порождающие шаблоны
- •К порождающим шаблонам относятся:
- •Шаблон Factory
- •Шаблон AbstractFactory
- •Шаблон Builder
- •Шаблон Singleton
- •Структурные шаблоны
- •К структурным шаблонам относятся:
- •Шаблон Bridge
- •Шаблон Decorator
- •Шаблоны поведения
- •К шаблонам поведения относятся:
- •Шаблон Command
- •Шаблон Strategy
- •Шаблон Observer
- •Тестовые задания к главе 5
- •Статический импорт
- •Внутренние классы
- •Внутренние (inner) классы
- •Вложенные (nested) классы
- •Анонимные (anonymous) классы
- •Задания к главе 6 Вариант а
- •Вариант b
- •Вариант c
- •Тестовые задания к главе 6
- •Вопрос 6.5.
- •Класс String
- •Классы StringBuilder и StringBuffer
- •Форматирование строк
- •Лексический анализ текста
- •Регулярные выражения
- •Интернационализация текста
- •Интернационализация чисел
- •Интернационализация дат
- •3 Апрель 2006 г.
- •Задания к главе 7 Вариант a
- •Вариант b
- •Тестовые задания к главе 7
- •Оператор throw
- •Ключевое слово finally
- •Собственные исключения
- •Наследование и исключения
- •Отладочный механизм assertion
- •Задания к главе 8
- •Байтовые и символьные потоки ввода/вывода
- •Предопределенные потоки
- •Сериализация объектов
- •Консоль
- •Класс Scanner
- •Архивация
- •Задания к главе 9 Вариант a
- •Вариант b
- •Вариант с
- •Тестовые задания к главе 9
- •Множества
- •Карты отображений
- •14El - найден по ключу '12'
- •Унаследованные коллекции
- •Класс Collections
- •Класс Arrays
- •Задания к главе 10 Вариант a
- •Вариант b
- •Тестовые задания к главе 10
- •Апплеты
- •Задания к главе 11
- •Тестовые задания к главе 11
- •Классы-адаптеры
- •Задания к главе 12
- •Тестовые задания к главе 12 Вопрос 12.1.
- •Вопрос 12.2.
- •Вопрос 12.3.
- •Вопрос 12.4.
- •Вопрос 12.5.
- •Г лава 13 элементы компоновки и управления
- •Менеджеры размещения
- •Элементы управления
- •Визуальные компоненты JavaBeans
- •Задания к главе 13 Вариант а
- •Вариант b
- •Жизненный цикл потока
- •Управление приоритетами и группы потоков
- •Управление потоками
- •Потоки-демоны
- •Потоки в графических приложениях
- •Методы synchronized
- •Инструкция synchronized
- •Состояния потока
- •Потоки в j2se 5
- •Задания к главе 14 Вариант а
- •Вариант b
- •Тестовые задания к главе 14
- •Вопрос 14.1.
- •Вопрос 14.2.
- •Вопрос 14.3.
- •Вопрос 14.4.
- •Вопрос 14.5.
- •Г лава 15 сетевые программы Поддержка Интернет
- •Сокетные соединения по протоколу tcp/ip
- •Многопоточность
- •Датаграммы и протокол udp
- •Задания к главе 15 Вариант а
- •Вариант b
- •Древовидная модель
- •Элементы таблицы стилей
- •Задания к главе 16 Вариант а
- •Тестовые задания к главе 16
- •Запуск контейнера сервлетов и размещение проекта
- •Первая jsp
- •Взаимодействие сервлета и jsp
- •Задания к главе 17 Вариант а
- •Вариант b
- •Интерфейс ServletContext
- •Интерфейс ServletConfig
- •Интерфейсы ServletRequest и HttpServletRequest
- •Интерфейсы ServletResponse и HttpServletResponse
- •Обработка запроса
- •Многопоточность
- •Электронная почта
- •Задания к главе 18 Вариант а
- •Вариант b
- •Стандартные элементы action
- •Неявные объекты
- •Демонстрация работы тегов c:forEach, c:choose, c:when, c:otherwise
- •Данная страница демонстрирует работу тегов
- •Включение ресурсов
- •Обработка ошибок
- •Технология взаимодействия jsp и сервлета
- •Задания к главе 19
- •Вариант а
- •Вариант b
- •Субд MySql
- •Простое соединение и простой запрос
- •Метаданные
- •Подготовленные запросы и хранимые процедуры
- •Транзакции
- •Id студента: 83, Petrov Внесены данные в students: 83, Petrov Внесены данные в course: 83, xml Данные внесены - транзакция завершена
- •Точки сохранения
- •Пул соединений
- •Задания к главе 20 Вариант а
- •Вариант b
- •Обработка событий
- •Фильтры
- •Задания к главе 21 Вариант а
- •Вариант b
- •Вопрос 21.5.
- •Вопрос 21.6.
- •Г лава22 пользовательские теги
- •Простой тег
- •Тег с атрибутами
- •Тег с телом
- •Элементы action
- •Задания к главе 22 Вариант а
- •Вариант b
- •П риложение 2
- •Включение скриптов на языке JavaScript в html-код
- •Отладка скриптов JavaScript
- •Типы данных
- •Специальные числа
- •Булев тип
- •Переменные типа Undefined и Null
- •Массивы
- •Операторы и выражения
- •Оператор with
- •Оператор switch
- •Метод eval()
- •Функции
- •Передача параметров по значению и по ссылке
- •Глобальные и локальные переменные
- •Пользовательские объекты
- •Прототипы
- •Встроенные объекты Array, Date, Math Объект Array
- •Объект Date
- •Объект Math
- •Объекты window и document
- •Создание новых узлов
- •Добавление новых узлов в документ
- •Удаление и замена узлов в документе
- •Использование каскадных таблиц стилей в dom
- •Свойство элемента innerHtml и outerHtml
- •Динамическое назначение событий
- •Ключевое слово this
- •П риложение3
- •Проектная модель
- •Uml как программный язык
- •Нотации и метамодель
- •Диаграммы, которые ниже будут рассмотрены с разной степенью детализации:
- •Свойства
- •Множественность
- •Операторы
- •П риложение 4 базы данных и язык sql
- •Реляционные субд Модель данных в реляционных субд
- •Нормализация модели данных
- •Язык sql
- •Команды sql
- •Команды определения структуры данных (DataDefinitionLanguage–ddl)
- •Команды манипулирования данными (Data Manipulation Language – dml)
- •Команды управления транзакциями (TransactionControlLanguage–tcl)
- •Команды управления доступом (DataControlLanguage–dcl)
- •Работа с командами sql
- •Ключевое слово distinct
- •Секция from, логическое связывание таблиц
- •Секция where
- •Секция orderby
- •Групповые функции
- •Секция group by
- •Секция having
- •Изменение данных
- •Команда insert
- •Команда delete
- •Команда update
- •Определение структуры данных Команда createtable
- •Команда droptable
- •П риложение5
- •П риложение 6
- •П риложение7 журнал сообщений (logger)
- •П риложение 8
- •Портлеты
Порождающие шаблоны
Порождающие шаблоны предназначаются для организации процесса создания объектов.
К порождающим шаблонам относятся:
Abstract Factory (Абстрактная Фабрика) – предоставляет интерфейс для создания связанных между собой объектов семейств классов без указания их конкретных реализаций;
Factory (Фабрика) – создает объект из иерархического семейства классов на основе передаваемых данных (частный случай Abstract Factory);
Builder (Строитель) – создает объект класса различными способами;
Singleton (Одиночка) – гарантирует существование только одного экземпляра класса;
Prototype (Прототип) – применяется при создании сложных объектов. На основе прототипа объекты сохраняются и воссоздаются, н-р путем копирования;
Factory Method (Фабричный Метод) – определяет интерфейс для создания объектов, при этом объект класса создается с помощью методов подклассов.
Шаблон Factory
Необходимо определить механизм создания объектов по заданному признаку для классов, находящихся в иерархической структуре. Основной класс шаблона представляет собой класс, который имеет методы для создания одного объекта из нескольких возможных на основе передаваемых данных.
Рис. 5.6. Пример реализации шаблона Factory
Решением проблемы может быть создание класса ClassFactory с одним методом getClassFromFactory(String id), возвращаемым значением которого будет ссылка на класс-вершину Base иерархии создаваемых классов. В качестве параметра метода передается некоторое значение, в соответствии с которым будет осуществляться инициализация объекта одного из подклассов класса Base.
Программная реализация может быть представлена в общем виде следующим образом.
/*пример # 10 : создание объектов с помощью шаблона Factory : Base.java : First.java : Second.java : ClassFactory.java : Main.java */
package chapt05.factory;
public abstract class Base {
public abstract void perform();
}
package chapt05.factory;
public class First extends Base {
public void perform() {
System.out.println("First");
}
}
package chapt05.factory;
public class Second extends Base {
public void perform() {
System.out.println("Second");
}
}
package chapt05.factory;
public class ClassFactory {
private enum Signs {FIRST, SECOND}
public static Base getClassFromFactory(String id) {
Signs sign = Signs.valueOf(id.toUpperCase());
switch(sign){
case FIRST : return new First();
case SECOND : return new Second();
default : throw new EnumConstantNotPresentException(
Signs.class, sign.name());
}
}
}
package chapt05.factory;
public class Main {
public static void main(String args[]) {
Base ob1 =
ClassFactory.getClassFromFactory("first");
Base ob2 =
ClassFactory.getClassFromFactory("second");
ob1.perform();
ob2.perform();
}
}
Один из примеров применения данного шаблона уже был рассмотрен в примере # 5 предыдущей главы.
Шаблон AbstractFactory
Необходимо создавать объекты классов, не имеющих иерархической связи, но логически связанных между собой. Абстрактный класс-фабрика определяет общий интерфейс таких фабрик. Его подклассы обладают конкретной реализацией методов по созданию разных объектов.
Предложенное решение изолирует конкретные классы. Так как абстрактная фабрика реализует процесс создания классов-фабрик и саму процедуру инициализации объектов, то она изолирует приложение от деталей реализации классов.
Одна из возможных реализаций шаблона предложена в следующем примере. Классы фабрики создаются по тому же принципу, по которому в предыдущем шаблоне создавались объекты.
/*пример # 11 : создание классов-фабрик по заданному признаку :
AbstractFactory.java */
package chapt05.abstractfactory;
public class AbstractFactory {
enum Color { BLACK, WHITE };
public static BaseFactory getFactory(String data) { Color my = Color.valueOf(data.toUpperCase());
switch (my){
case BLACK : return new BlackFactory();
case WHITE : return new WhiteFactory();
default : throw new
EnumConstantNotPresentException(Signs.class, sign.name());
}
}
}
Рис. 5.7. Пример реализации шаблона AbstractFactory
Производители объектов реализуют методы по созданию не связанных иерархическими зависимостями объектов. Класс BaseFactory – абстрактная фабрика, а классы BlackFactory и WhiteFactory конкретные производители объектов, наследуемые от нее. Конкретные фабрики могут создавать черные или белые объекты-продукты.
/*пример # 12 : классы-фабрики по созданию несвязанных объектов :
BaseFactory.java : BlackFactory.java : WhiteFactory.java */
package chapt05.abstractfactory;
public abstract class BaseFactory {
public abstract Circle createCircle(double radius);
public abstract Triangle createTriangle(double a,
double b);
}
package chapt05.abstractfactory;
public class BlackFactory extends BaseFactory {
public Circle createCircle(double radius) {
return new BlackCircle(radius);
}
public Triangle createTriangle(double a, double b){
return new BlackTriangle(a,b);
}
}
package chapt05.abstractfactory;
public class WhiteFactory extends BaseFactory {
public Circle createCircle(double radius) {
return new WhiteCircle(radius);
}
public Triangle createTriangle(double a, double b){
return new WhiteTriangle(a, b);
}
}
Рассматриваются два вида классов-продуктов: Circle, Triangle. Каждый из них может быть представлен в одном из двух цветов: белом или черном.
/*пример # 13 : классы-продукты : Circle.java : Triangle.java */
package chapt05.abstractfactory;
public abstract class Circle {
protected double radius;
protected String color;
public abstract void square();
}
package chapt05.abstractfactory;
public class BlackCircle extends Circle {
public BlackCircle(double radius){
this.radius = radius;
color = "Black";
}
public void square(){
double s = Math.PI * Math.pow(radius, 2);
System.out.println(color + " Circle"
+ " Square = " + s);
}
}
package chapt05.abstractfactory;
public class WhiteCircle extends Circle{
public WhiteCircle(double radius){
this.radius = radius;
color = "White";
}
public void square(){
double s = Math.PI * Math.pow(radius, 2);
System.out.println(color + " Circle "
+ "Square = " + s);
}
}
package chapt05.abstractfactory;
public abstract class Triangle {
protected double a, b;
protected String color;
public abstract void square();
}
package chapt05.abstractfactory;
public class BlackTriangle extends Triangle {
public BlackTriangle (double a, double b){
this.a = a;
this.b = b;
color = "Black";
}
public void square(){
double s = a * b / 2;
System.out.println(color + " Triangle"
+ " Square = " + s);
}
}
package chapt05.abstractfactory;
public class WhiteTriangle extends Triangle {
public WhiteTriangle (double a,double b) {
this.a = a;
this.b = b;
color = "White";
}
public void square(){
double s = 0.5 * a * b;
System.out.println(color + " Triangle"
+ " Square = " + s);
}
}
Ниже будут созданы объекты всех классов и всех цветов.
/*пример # 14 : демонстрация работы шаблона AbstractFactory : Main.java */
package chapt05.abstractfactory;
public class Main {
public static void main(String[] args) {
BaseFactory factory1 =
AbstractFactory.getFactory("black");
BaseFactory factory2 =
AbstractFactory.getFactory("white");
Circle ob1 = factory1.createCircle(1.232);
Circle ob2 = factory2.createCircle(1);
Triangle ob3 = factory1.createTriangle(12,5);
Triangle ob4 = factory2.createTriangle(1,7);
ob1.square();
ob2.square();
ob3.square();
ob4.square();
}
}