1. Definition
The Factory Method is a creational design pattern that provides an interface for creating objects, but allows subclasses to alter the type of objects that will be created.
2. Problem Statement
Imagine you're developing a UI library, and you want to allow users to create custom buttons without altering existing code. If you hard-code the button types, adding a new button style would require changes to the entire library, breaking the Open/Closed principle.
3. Solution
The Factory Method pattern suggests that you replace direct object construction calls (using the new operator) with calls to a special factory method. Objects returned by a factory method are often referred to as "products."
4. Real-World Use Cases
1. A UI library where developers can introduce new styles of buttons without recompiling the library.
2. An e-commerce platform allowing vendors to provide their custom payment gateways.
5. Implementation Steps
1. Declare a creator interface with the factory method.
2. Concrete creators will implement the factory method and return different types of products.
3. Declare a product interface.
4. Concrete products implement the product interface.
6. Implementation in Swift Programming
// Step 3: Declare a product interface. protocol Button { func render() } // Step 4: Concrete products implement the product interface. class WindowsButton: Button { func render() { print("Rendering a Windows-style button.") } } class MacButton: Button { func render() { print("Rendering a Mac-style button.") } } // Step 1: Declare a creator interface with the factory method. protocol Dialog { func createButton() -> Button } // Step 2: Concrete creators implement the factory method. class WindowsDialog: Dialog { func createButton() -> Button { return WindowsButton() } } class MacDialog: Dialog { func createButton() -> Button { return MacButton() } } // Usage func displayDialog(for dialog: Dialog) { let button = dialog.createButton() button.render() } let windowsDialog = WindowsDialog() let macDialog = MacDialog() displayDialog(for: windowsDialog) displayDialog(for: macDialog)
Output:
Rendering a Windows-style button. Rendering a Mac-style button.
Explanation:
1. We've created a Button protocol which is our product interface. WindowsButton and MacButton are concrete products.
2. The Dialog protocol is our creator interface with a factory method createButton().
3. WindowsDialog and MacDialog are concrete creators. They implement the factory method and produce a product (Button).
4. In usage, based on the type of Dialog passed to displayDialog, the appropriate button is rendered.
7. When to use?
The Factory Method pattern can be used when:
1. The exact type of the product isn't known until runtime.
2. The creation process is complex or involves multiple steps.
3. The product needs to be extended to subclasses.
4. The creator class should remain decoupled from its products.
Design Pattern Related Swift Examples:
Swift Hello World Program Swift Program to Add Two Numbers Swift Program to Subtract Two Numbers Swift Program to Multiply Two Numbers Swift Program to Divide Two Numbers Swift Program to Find Remainder Swift Program to Check Even or Odd Swift Program to Find Factorial of a Number Swift Program to Generate Fibonacci Series Swift Program to Swap Two Numbers Without Using Temporary Variable Swift Program to Find Largest Among Three Numbers Swift Program to Calculate the Area of a Circle Swift Program to Reverse a Number Swift Program to Make a Simple Calculator Swift Program to Check Palindrome Swift Program to Count Number of Digits in an Integer Swift Program to Sum of Natural Numbers Swift Program to Display Times Table Swift Program to Check Prime Number Swift Program to Find LCM Swift Program to Find GCD Swift Program to Find the Power of a Number Swift Program to Split a String into Words Swift Program to Check Leap Year Swift Program to Join Two Strings Swift Program to Check Armstrong Number Swift Program to Find Sum of Array Elements Swift Program to Find the Largest Element of an Array Swift Program to Perform Matrix Addition Swift Program to Transpose a Matrix Swift Program to Multiply Two Matrices Swift Program to Find Length of a String Swift Program to Copy One String to Another String Swift Program to Concatenate Two Strings Swift Program to Search for a Character in a String Swift Program to Count Frequency of a Character in String Swift Program to Create a Simple Class and Object Swift Program to Implement Inheritance Swift Program to Handle Simple Exceptions Swift Variables and Constants Example Swift Data Types (Int, Double, String) Example Swift Optionals and Optional Binding Example Swift Tuples Example Swift Array Example Swift Dictionary Example Swift Set Example Swift Closures Example Swift Enums Example Swift Structures Example Swift Properties (Stored, Computed) Example Swift Methods (Instance, Type) Example Swift Subscripts Example Swift Inheritance and Overriding Example Swift Protocols Example Swift Extensions Example Swift Generics and Generic Functions Example Swift Error Handling with Do-Catch Example Swift Guard Statement Example Swift Defer Statement Example Swift Type Casting (as, is, as?) Example Swift Access Control Example Swift Attributes (@available, @discardableResult) Example Swift Pattern Matching Example Swift Switch Statement and Cases Example Swift For-In Loop Example Swift While and Repeat-While Loops Example Swift Conditional Statements (If, If-Else, Ternary) Example Swift Operators Example Swift Memory Management Example Swift Strong, Weak, and Unowned References Example Swift Initialization and Deinitialization Example Swift Protocol-Oriented Programming Example Swift Nested Types Example Swift Type Aliases Example Swift Dynamic Member Lookup Example Swift Lazy Stored Properties Example Swift KeyPaths Example Swift String Manipulation and Methods Example Swift Regular Expressions Example Swift
Comments
Post a Comment