Определение
Фабричный шаблон или шаблон фабричного метода говорит, что просто определите интерфейс или абстрактный класс для создания объекта, но позвольте подклассам решать, экземпляр какого класса создавать. Другими словами, подклассы отвечают за создание экземпляра класса. Шаблон фабричного метода также известен как виртуальный конструктор. Источник: https:// www.javatpoint.com/factory-method-design-pattern
// Superclass
public abstract class Weapon {
// Abstract factory method
public abstract void displayWeapon();
}
// Subclass 1: MeleeWeapon
public class MeleeWeapon extends Weapon {
@Override
public void displayWeapon() {
System.out.println("Display a Melee Weapon.");
}
}
// Subclass 2: RangedWeapon
public class RangedWeapon extends Weapon {
@Override
public void displayWeapon() {
System.out.println("Display a Ranged Weapon.");
}
}
// Subclass 3: MagicWeapon
public class MagicWeapon extends Weapon {
@Override
public void displayWeapon() {
System.out.println("Display a Magic Weapon.");
}
}
// Creator class
public class WeaponCreator {
// Factory method
public Weapon createWeapon(String weaponType) {
if (weaponType.equalsIgnoreCase("melee")) {
return new MeleeWeapon();
} else if (weaponType.equalsIgnoreCase("ranged")) {
return new RangedWeapon();
} else if (weaponType.equalsIgnoreCase("magic")) {
return new MagicWeapon();
} else {
throw new IllegalArgumentException("Invalid weapon type: " + weaponType);
}
}
}
public class Main {
public static void main(String[] args) {
// Create a WeaponCreator instance
WeaponCreator creator = new WeaponCreator();
// Create different weapons using the factory method
Weapon melee = creator.createWeapon("melee");
melee.displayWeapon(); // Output: Displaying a Melee Weapon.
Weapon ranged = creator.createWeapon("ranged");
ranged.displayWeapon(); // Output: Displaying a Ranged Weapon.
Weapon magic = creator.createWeapon("magic");
magic.displayWeapon(); // Output: Displaying a Magic Weapon.
}
}
Мой вопрос
Как подкласс решает, какой класс создать? Насколько я понимаю, фабричный метод WeaponCreator решает, какой класс создать, используя входные данные метода.
Что означает предложение Шаблон фабричного метода также известен как виртуальный конструктор< /strong> на самом деле означает?
Пожалуйста, помогите мне с примерами, поскольку я не могу понять это простое определение.
[b]Определение[/b] Фабричный шаблон или шаблон фабричного метода говорит, что просто определите интерфейс или абстрактный класс для создания объекта, но позвольте подклассам решать, экземпляр какого класса создавать. Другими словами, подклассы отвечают за создание экземпляра класса. Шаблон фабричного метода также известен как виртуальный конструктор. [b]Источник[/b]: https:// www.javatpoint.com/factory-method-design-pattern [code]// Superclass public abstract class Weapon { // Abstract factory method public abstract void displayWeapon(); }
// Subclass 1: MeleeWeapon public class MeleeWeapon extends Weapon { @Override public void displayWeapon() { System.out.println("Display a Melee Weapon."); } }
// Subclass 2: RangedWeapon public class RangedWeapon extends Weapon { @Override public void displayWeapon() { System.out.println("Display a Ranged Weapon."); } }
// Subclass 3: MagicWeapon public class MagicWeapon extends Weapon { @Override public void displayWeapon() { System.out.println("Display a Magic Weapon."); } }
// Creator class public class WeaponCreator { // Factory method public Weapon createWeapon(String weaponType) { if (weaponType.equalsIgnoreCase("melee")) { return new MeleeWeapon(); } else if (weaponType.equalsIgnoreCase("ranged")) { return new RangedWeapon(); } else if (weaponType.equalsIgnoreCase("magic")) { return new MagicWeapon(); } else { throw new IllegalArgumentException("Invalid weapon type: " + weaponType); } } }
public class Main { public static void main(String[] args) { // Create a WeaponCreator instance WeaponCreator creator = new WeaponCreator();
// Create different weapons using the factory method Weapon melee = creator.createWeapon("melee"); melee.displayWeapon(); // Output: Displaying a Melee Weapon.
[/code] Мой вопрос [list] [*]Как подкласс решает, какой класс создать? Насколько я понимаю, фабричный метод WeaponCreator решает, какой класс создать, используя входные данные метода. [*]Что означает предложение Шаблон фабричного метода также известен как виртуальный конструктор< /strong> на самом деле означает? [/list] Пожалуйста, помогите мне с примерами, поскольку я не могу понять это простое определение.