From 2d750dc0fdfc848e67d5f9a8524b5a19817401e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ilkka=20Sepp=C3=A4l=C3=A4?= Date: Sat, 12 Aug 2017 20:02:14 +0300 Subject: [PATCH] #590 Alter Factory Method presentation --- factory-method/README.md | 41 +++++++- factory-method/etc/factory-method.png | Bin 22316 -> 0 bytes factory-method/etc/factory-method.ucls | 117 --------------------- factory-method/etc/factory-method.urm.puml | 54 ---------- factory-method/etc/factory-method_1.png | Bin 47622 -> 0 bytes pom.xml | 1 + 6 files changed, 41 insertions(+), 172 deletions(-) delete mode 100644 factory-method/etc/factory-method.png delete mode 100644 factory-method/etc/factory-method.ucls delete mode 100644 factory-method/etc/factory-method.urm.puml delete mode 100644 factory-method/etc/factory-method_1.png diff --git a/factory-method/README.md b/factory-method/README.md index 17e0818e91d..de3a9dd8c6d 100644 --- a/factory-method/README.md +++ b/factory-method/README.md @@ -19,7 +19,46 @@ Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory Method lets a class defer instantiation to subclasses. -![alt text](./etc/factory-method_1.png "Factory Method") +## Explanation + +Real world example +> Blacksmith manufactures weapons. Elves require Elvish weapons and orcs require Orcish weapons. Depending on the customer at hand the right type of blacksmith is summoned. + +In plain words +> It provides a way to delegate the instantiation logic to child classes. + +Wikipedia says +> In class-based programming, the factory method pattern is a creational pattern that uses factory methods to deal with the problem of creating objects without having to specify the exact class of the object that will be created. This is done by creating objects by calling a factory method—either specified in an interface and implemented by child classes, or implemented in a base class and optionally overridden by derived classes—rather than by calling a constructor. + + **Programmatic Example** + +Taking our blacksmith example above. First of all we have a blacksmith interface and some implementations for it + +``` +public interface Blacksmith { + Weapon manufactureWeapon(WeaponType weaponType); +} + +public class ElfBlacksmith implements Blacksmith { + public Weapon manufactureWeapon(WeaponType weaponType) { + return new ElfWeapon(weaponType); + } +} + +public class OrcBlacksmith implements Blacksmith { + public Weapon manufactureWeapon(WeaponType weaponType) { + return new OrcWeapon(weaponType); + } +} +``` + +Now as the customers come the correct type of blacksmith is summoned and requested weapons are manufactured +``` +Blacksmith blacksmith = new ElfBlacksmith(); +blacksmith.manufactureWeapon(WeaponType.SPEAR); +blacksmith.manufactureWeapon(WeaponType.AXE); +// Elvish weapons are created +``` ## Applicability Use the Factory Method pattern when diff --git a/factory-method/etc/factory-method.png b/factory-method/etc/factory-method.png deleted file mode 100644 index c2edfd6484ea802895f57e08797c0172bedb0f1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22316 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 JtBW^6{|~uX4SWCq diff --git a/factory-method/etc/factory-method.ucls b/factory-method/etc/factory-method.ucls deleted file mode 100644 index 562437995a6..00000000000 --- a/factory-method/etc/factory-method.ucls +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/factory-method/etc/factory-method.urm.puml b/factory-method/etc/factory-method.urm.puml deleted file mode 100644 index 73a05e17866..00000000000 --- a/factory-method/etc/factory-method.urm.puml +++ /dev/null @@ -1,54 +0,0 @@ -@startuml -package com.iluwatar.factory.method { - class App { - - LOGGER : Logger {static} - - blacksmith : Blacksmith - + App(blacksmith : Blacksmith) - + main(args : String[]) {static} - - manufactureWeapons() - } - interface Blacksmith { - + manufactureWeapon(WeaponType) : Weapon {abstract} - } - class ElfBlacksmith { - + ElfBlacksmith() - + manufactureWeapon(weaponType : WeaponType) : Weapon - } - class ElfWeapon { - - weaponType : WeaponType - + ElfWeapon(weaponType : WeaponType) - + getWeaponType() : WeaponType - + toString() : String - } - class OrcBlacksmith { - + OrcBlacksmith() - + manufactureWeapon(weaponType : WeaponType) : Weapon - } - class OrcWeapon { - - weaponType : WeaponType - + OrcWeapon(weaponType : WeaponType) - + getWeaponType() : WeaponType - + toString() : String - } - interface Weapon { - + getWeaponType() : WeaponType {abstract} - } - enum WeaponType { - + AXE {static} - + SHORT_SWORD {static} - + SPEAR {static} - + UNDEFINED {static} - - title : String - + toString() : String - + valueOf(name : String) : WeaponType {static} - + values() : WeaponType[] {static} - } -} -ElfWeapon --> "-weaponType" WeaponType -OrcWeapon --> "-weaponType" WeaponType -App --> "-blacksmith" Blacksmith -ElfBlacksmith ..|> Blacksmith -ElfWeapon ..|> Weapon -OrcBlacksmith ..|> Blacksmith -OrcWeapon ..|> Weapon -@enduml \ No newline at end of file diff --git a/factory-method/etc/factory-method_1.png b/factory-method/etc/factory-method_1.png deleted file mode 100644 index 6b9276781be2e1f498f590a7877a6434204caa41..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47622 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 E0=f?*lK=n! diff --git a/pom.xml b/pom.xml index 0ea198c3f1e..7f96043f583 100644 --- a/pom.xml +++ b/pom.xml @@ -461,6 +461,7 @@ java-design-patterns singleton + factory-method