Design Pattern: Factory Method
适用场景
Overview
classDiagram
class Product {
<>
+doStuff()
}
class ConcreteProductA
class ConcreteProductB
Product <|.. ConcreteProductA
Product <|.. ConcreteProductB
class Creator {
+someOperation()
+createProduct() Product
}
class ConcreteCreatorA {
+createProduct() Product
}
class ConcreteCreatorB {
+createProduct() Product
}
Creator <|-- ConcreteCreatorA
Creator <|-- ConcreteCreatorB
Creator ..> Product : creates
伪代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
|
class Dialog { abstract auto createButton() -> Button;
auto render() { Button okBUtton = createButton() okButton.onClick(closeDialog) okButton.render() } }
class WindowsDialog extends Dialog { auto createButton() -> Button { return new WindowsButton() } }
class WebDialog(Dialog) { auto createButton() -> Button { return new HTMLButton() } }
interface Button { auto render() -> void; auto onClick(f) -> void; }
class WindowsButton implements Button { auto render() -> void { ... } auto onClick(f) -> void { ... } }
class HTMLButton implements Button { auto render(a, b) -> void { ... } auto onClick(f) -> void { ... } }
if (application == "os") { dialog = new WindowsDialog() } else { dialog = new HTMLDialog() }
|