design patterns java
У цьому підручнику ми обговоримо шаблони дизайну на Java. Ми вивчимо моделі Singleton, Factory та Builder із прикладами та перевагами:
Коли ми вирішуємо конкретну проблему, ми можемо вирішити її ефективніше, якщо маємо вже визначені найкращі практики. Це справді допоможе нам слідувати цим найкращим практикам та розробляти більш надійні рішення.
Ці Кращі практики що можна використовувати для розвитку добре перевірені рішення для вирішення проблем називаються Шаблони дизайну '. Досвідчені розробники програмного забезпечення ООП використовують шаблони проектування для вирішення конкретних завдань.
=> Подивіться тут посібник для початківців Java
Що ви дізнаєтесь:
- Дизайн шаблонів на Java
- Одномісний шаблон у Java
- Фабричний шаблон у Java
- Конструктор шаблон на Java
- Висновок
Дизайн шаблонів на Java
Схеми дизайну були вперше винайдені Крістофером Олександром в 1977 році. Але згодом чотири розробники, а саме Еріх Гамма, Річард Хелм, Джон Вліссідес та Ральф Джонсон, написали книгу під назвою ' Банда з чотирьох дизайнів, елементи багаторазового об'єктно-орієнтованого програмного забезпечення ”У 1995 році.
Відтоді всі шаблони дизайну стали відомими як “ Банда з чотирьох шаблонів дизайну '.
як встановити файл .jar
Шаблони проектування не залежать від будь-яких мов програмування, оскільки вони використовуються для вирішення загальних об’єктно-орієнтованих проблем проектування і не обмежуються лише певною мовою програмування. Отже, в основному це ідея, а не реалізація.
Таким чином, використовуючи шаблони дизайну, ми можемо розробляти програми, які є більш ефективними, гнучкими, ремонтопридатними та багаторазовими.
Переваги дизайнерських зразків
Нижче наведено деякі переваги використання шаблонів дизайну в наших додатках:
- Шаблони дизайну можна використовувати багаторазово і можуть використовуватися в кількох проектах.
- Ми можемо визначити архітектуру системи, використовуючи шаблони проектування.
- Шаблони дизайну забезпечують прозорість дизайну програми.
- Шаблони дизайну вже добре перевірені і перевірені, щоб ми могли ними користуватися без будь-яких турбот.
- Шаблони проектування дозволяють нам будувати кращі системи, а також забезпечують чіткість архітектури системи.
Коли використовувати шаблони дизайну
Тож коли ми повинні точно використовувати шаблони дизайну?
Зазвичай ми використовуємо шаблон дизайну під час початкового етапу аналізу та вимог SDLC (життєвий цикл розробки програмного забезпечення). При використанні під час фази аналізу та потреби SDLC він надає більше інформації для цієї фази. Java внутрішньо підтримує шаблони дизайну.
Шаблони дизайну в Java класифікуються наступним чином:
Що стосується цього підручника, нас цікавлять лише креативні шаблони дизайну.
Далі класифікаційні шаблони дизайну класифікуються наступним чином:
У цьому підручнику ми обговоримо такі шаблони дизайну:
- Одномісний шаблон дизайну
- Фабрика шаблон дизайну
- Будівельник шаблон дизайну
Почнемо з одинарного шаблону дизайну на Java.
Рекомендована література = >> Шаблони дизайну для програм на основі колб
Одномісний шаблон у Java
Одиночний шаблон - це тип творчого шаблону в Java. Шаблон Singleton - це шаблон дизайну, при якому у віртуальній машині Java присутній лише один екземпляр класу. Клас-одинар (реалізує шаблон-одиночку) повинен надати глобальну точку доступу, щоб отримати екземпляр класу.
Іншими словами, односторонній шаблон обмежує інстанціювання класу. Шаблон Singleton використовується при реалізації реєстратора для додатків. Він також використовується в реалізації пулу потоків або кеш-пам’яті.
Класи Java, java.awt.Desktop і java.lang.runtime також використовуйте одинарний шаблон.
Переваги
- Оскільки використовується лише один екземпляр класу singleton, ми економимо пам’ять.
- Крім того, забезпечує повторне використання, оскільки один і той же об'єкт-одинар використовується знову і знову.
Тепер перейдемо до реалізації синглтон-шаблону.
Реалізація шаблону Singleton
Як уже зазначалося, односторонній шаблон дизайну обмежує клас лише одним екземпляром, і цьому екземпляру надається глобальна точка доступу. Це були всі класи, які знову і знову посилаються на один і той же об’єкт.
Наступна діаграма UML пояснює шаблон Singleton.
Як видно з наведеної вище діаграми UML, у синглтон-класі визначено єдиний екземпляр, і ми отримуємо доступ до нього методом getInstance (). Тож фабрика-одиночка, яка відповідає за створення об’єктів, використовує метод getInstance, щоб повертати той самий об’єкт (який є в класі) знову і знову.
Отже, як ми реалізуємо шаблон Singleton в програмі?
Ми створюємо клас-синглтон і маємо його конструктор як “приватний”, так що клас неможливо створити. Потім ми створюємо приватний екземпляр цього синглтон-класу всередині самого класу. Тоді ми маємо спеціальний загальнодоступний метод getInstance (), який повертає одномісний об'єкт до зовнішнього світу.
Ця реалізація цього синглтон-класу, як пояснено вище, показана в програмі Java нижче.
class SingletonObject { //create an object of SingletonObject private static SingletonObject instance = new SingletonObject(); //private constructor so that we cannot instantiate the class private SingletonObject(){} //returns the only available object public static SingletonObject getInstance(){ return instance; } public void printMessage(){ System.out.println('Hello from Singleton object!!!'); } } public class Main { public static void main(String() args) { //illegal statement because constructor is private //Compile Time Error: The constructor SingletonObject() is not visible //SingletonObject object = new SingletonObject(); //call getInstance to retrieve the object available from the class SingletonObject object = SingletonObject.getInstance(); //show the message object.printMessage(); } }
Вихід:
Тепер, якщо ми перевіримо основний метод, зверніть увагу, що якщо ми намагаємось створити об’єкт класу singleton за допомогою нового оператора, компілятор видасть помилку компіляції (див. Коментований код в основному методі). Ми отримуємо об'єкт класу singleton за допомогою методу getInstance (), а потім можемо використовувати його, як зазвичай, для доступу до методів.
Фабричний шаблон у Java
Заводський шаблон у Java також називається 'Шаблон фабричного методу' або 'Віртуальний конструктор'. За цим шаблоном ми створюємо інтерфейс або абстрактний клас з деклараціями методів, а потім конкретні класи або підкласи, що реалізують цей інтерфейс або успадковують клас, відповідають за створення екземплярів класу.
Переваги
- Фабричний шаблон - це тип креативного шаблону і є найбільш часто використовуваним шаблоном на Java.
- Застосовуючи заводський зразок, ми гарантуємо, що реальна логіка створення не піддається зовнішньому світу.
Отже, якщо клас, що реалізує фабричну модель, має метод для розрахунку процентної ставки, то конкретні класи реалізують цей клас, а також реалізують метод для розрахунку процентної ставки.
Тоді буде інший клас, який є заводським класом, який буде отримувати доступ до цих конкретних екземплярів класу, так що ми не знаємо, як реалізована логіка для обчислення процентної ставки. Ми викликаємо лише метод і отримуємо вихідні дані.
Отже, коли саме ми можемо використовувати шаблон фабричного методу?
Коли батьківські класи вирішать делегувати створення примірників своїм підкласам, тоді ми можемо вибрати фабричний шаблон (це пояснено вище). Ми також можемо використовувати заводський метод, коли клас не знає, які підкласи слід створити.
Тепер давайте подивимося реалізацію шаблону заводських методів.
Впровадження заводського зразка
Як приклад, давайте реалізуємо загальний інтерфейс фігури. З цього інтерфейсу ми можемо вивести різні конкретні класи, такі як коло, прямокутник тощо. Тоді ми матимемо клас shapeFactory, який буде отримувати доступ до об’єктів конкретного класу. UML для цього шаблону показано нижче.
Як вже пояснювалося, це діаграма UML для заводського зразка. Тепер ми реалізуємо програму Java, що демонструє заводський шаблон.
//Geometric_shape interface interface Geometric_shape { void draw_shape(); } //Geometric shape classes implementing Geometric_shape interface class Rectangle implements Geometric_shape { @Override public void draw_shape() { System.out.println('Rectangle class::draw_shape() method.'); } } class Square implements Geometric_shape { @Override public void draw_shape() { System.out.println('Square class::draw_shape() method.'); } } class Circle implements Geometric_shape { @Override public void draw_shape() { System.out.println('Circle class::draw_shape() method.'); } } //Factory class for Geometric_shape class ShapeFactory { //shapeObject method gets particular shapeType (circle, Square or Rectangle) public Geometric_shape shapeObject(String shapeType){ if(shapeType == null){ return null; } //retrieve Circle object if(shapeType.equalsIgnoreCase('Circle')){ return new Circle(); //retrieve Rectangle object } else if(shapeType.equalsIgnoreCase('Rectangle')){ return new Rectangle(); ////retrieve Square object } else if(shapeType.equalsIgnoreCase('Square')){ return new Square(); } return null; } } public class Main { public static void main(String() args) { //Create a ShapeFactory object to get different geometric shapes ShapeFactory shapeFactory = new ShapeFactory(); //circle Geometric_shape shape_Circle = shapeFactory.shapeObject('CIRCLE'); //draw method of Circle shape_Circle.draw_shape(); //Rectangle Geometric_shape shape_Rectangle = shapeFactory.shapeObject('RECTANGLE'); //draw method of Rectangle shape_Rectangle.draw_shape(); //Square Geometric_shape shape_Square = shapeFactory.shapeObject('SQUARE'); //draw method of square shape_Square.draw_shape(); } }
Вихід:
Конструктор шаблон на Java
У шаблоні Builder ми використовуємо поетапний підхід для побудови складного об’єкта, використовуючи малі та прості об’єкти.
Отже, коли ми зустрічаємо об’єкт, який неможливо створити за один крок, ми використовуємо шаблон побудови.
Переваги
- Використовуючи шаблон Builder, ми можемо розділити конструкцію та подання об’єкта.
- Ми також можемо змінити внутрішнє представлення об'єкта.
- Ми можемо будувати складні конструкції, як ціла система доставки, використовуючи шаблон побудови.
Практичним прикладом шаблону Builder є система замовлення продуктів харчування, яка включала складні етапи збору замовлених продуктів харчування, потім упаковки, виставлення рахунків, замовлення на будівництво, а потім їх доставки.
У цьому посібнику ми реалізуємо приклад системи замовлення планшетів із використанням шаблону Builder.
Впровадження шаблону будівельника
Загальна діаграма UML для шаблону Builder наведена нижче.
На наведеній вище схемі показана діаграма UML шаблону Builder. Як показано на наведеній вище схемі, у нас є чотири компоненти у шаблоні Builder.
- Продукт: Це являє собою складний об’єкт, який потрібно побудувати.
- Абстрактний клас будівельника: Абстрактний клас, що містить прототипи всіх функціональних можливостей, необхідних для побудови складного об'єкта.
- Клас ConcreteBuilder: Це конкретний клас, який успадковується від класу Builder і створює певний складний об'єкт. Ми можемо мати стільки класів ConcreteBuilder, скільки нам потрібно.
- Клас режисера: Цей клас контролює алгоритми, що генерують кінцевий продукт.
Наступний приклад програмування демонструє демонстрацію шаблону Builder із використанням системи замовлення планшетів для замовлення.
import java.util.ArrayList; import java.util.List; //Packing interface for tablets interface Packing { public String pack(); public int price(); } //Tablet class - abstract abstract class Tablet implements Packing{ public abstract String pack(); } //company - extends Tablet abstract class Company extends Tablet{ public abstract int price(); } //Lenovo tablet class Lenovo extends Company{ @Override public int price(){ return 541; } @Override public String pack(){ return 'Lenovo Yoga'; } } //Micromax tablet class MicroMax extends Company { @Override public int price(){ return 338; } @Override public String pack(){ return 'MicroMax'; } } //Tablet type class TabType { private List items=new ArrayList(); //add items public void addItem(Packing packs) { items.add(packs); } //retrieve cost public void getCost(){ for (Packing packs : items) { packs.price(); } } //show all items public void showItems(){ for (Packing packing : items){ System.out.print('Tablet name : '+packing.pack()); System.out.println(', Price(in U.S.Dollars) : '+packing.price()); } } } //builder class for tablets order class TabBuilder { public TabType buildLenovoTab(){ TabType lenovo =new TabType(); lenovo.addItem(new Lenovo()); return lenovo; } public TabType buildMicroMaxTab(){ TabType mmx=new TabType(); mmx.addItem(new MicroMax()); return mmx; } } public class Main{ public static void main(String args()){ //build the tablets order and display the order TabBuilder tabBuilder=new TabBuilder(); TabType tabtype1=tabBuilder.buildLenovoTab(); tabtype1.showItems(); TabType tabtype2=tabBuilder.buildMicroMaxTab(); tabtype2.showItems(); } }
Вихід:
У наведеному вище прикладі ми створили повну систему замовлення планшетів для двох марок планшетів, тобто Lenovo та Micromax. Це класи concreteBuilder, які успадковуються від компанії абстрактних класів. Тоді ми маємо клас TabBuilder, який будує замовлення для обох класів планшетів.
Часті запитання
Q # 1) Що таке шаблони дизайну в Java? Які типи шаблонів дизайну в Java?
Як створити новий список в Java - -
Відповідь: Шаблони дизайну - це найкращі практики, які можна використовувати для розробки добре перевірених рішень.
Java має три типи шаблонів дизайну:
- Творчий шаблон дизайну: Фабричний візерунок, Анотація Фабричний візерунок, візерунок Singleton, шаблон Builder та шаблон прототипу - це приклади креативних дизайнерських зразків. Вони в основному беруть участь у створенні об’єктів.
- Структурний шаблон дизайну: Вони в основному використовуються для створення структури класу. Адаптер, міст та композитний малюнок - популярні шаблони структурного дизайну.
- Поведінковий шаблон дизайну: Вони забезпечують кращу взаємодію між об’єктами, а також гнучкість для легкого розширення реалізації. Шаблони спостерігачів, стратегія тощо - ось деякі приклади поведінкових моделей.
Q # 2) Чому використовуються шаблони дизайну?
Відповідь: Шаблони проектування надають нам перевірену і перевірену модель рішення, яку ми можемо використовувати для вирішення складних проблем. Структурні схеми дозволяють нам будувати цілісні модулі з вільною муфтою. Шаблони дизайну також роблять взаємодію між дизайнерами більш ефективною та результативною.
Q # 3) Які приклади шаблонів?
Відповідь: Прикладами природних закономірностей є видимі закономірності, знайдені в природі. Природні візерунки, такі як симетрія, дерева, хвилі, піни, смуги, тріщини тощо, є деякими прикладами природних візерунків.
Q # 4) Чи є MVC шаблоном дизайну?
Відповідь: Так, це свого роду шаблон дизайну, за допомогою якого ми можемо створити додаток, що складається з моделі даних, презентації або рівня подання та контролера. Ми можемо класифікувати це більше як архітектурний зразок.
Висновок
На цьому наша дискусія щодо шаблонів дизайну в Java. Хоча Java підтримує три типи шаблонів дизайну, а саме. Творчі, структурні та поведінкові моделі, нас більше цікавить креативний шаблон дизайну.
Відповідно до обсягу цього підручника, ми обговорили три приклади візерунків креативного дизайну, а саме одинарний шаблон, фабричний шаблон та шаблон будівельника.
Одиночний шаблон - це найпростіший шаблон дизайну, а фабричний метод повинен бути загальноприйнятим шаблоном дизайну, який широко використовується. Шаблон конструктора використовується для побудови складних об'єктів і в основному використовується при розробці складних додатків.
=> Ознайомтесь з Ідеальним посібником з навчання Java тут.
Рекомендована література
- Рядок Java із підручником для буфера рядків та побудови рядків
- Розгортання Java: Створення та виконання файлу JAR Java
- Основи Java: Синтаксис Java, клас Java та основні концепції Java
- Віртуальна машина Java: як JVM допомагає у запуску програми Java
- Підручник JAVA для початківців: 100+ практичних відео-підручників Java
- Java Integer та клас Java BigInteger з прикладами
- Компоненти Java: платформа Java, JDK, JRE та віртуальна машина Java
- Список важливих ключових слів на Java - зарезервовані слова в Java