场景举例
工厂生产产品
一个工厂可以生产多种具有相同功能的产品
工厂生产的产品
1 2 3
| public interface Button { void click(); }
|
1 2 3 4 5 6
| public class HTMLButton implements Button{ @Override public void click() { System.out.println("HTML Click"); } }
|
1 2 3 4 5 6
| public class WindowsButton implements Button{ @Override public void click() { System.out.println("Windows Click"); } }
|
工厂创造者
1 2 3 4 5 6 7 8 9
| public abstract class ABaseButtonFactory {
public void createAndAutoClickButton(){ Button button = createButton(); button.click(); }
protected abstract Button createButton(); }
|
1 2 3 4 5 6 7
| public class HTMLButtonFactory extends ABaseButtonFactory {
@Override public Button createButton() { return new HTMLButton(); } }
|
1 2 3 4 5 6
| public class WindowsButtonFactory extends ABaseButtonFactory { @Override public Button createButton() { return new WindowsButton(); } }
|
测试演示
1 2 3 4 5 6 7 8 9 10
| public class FactoryMethodPattern { public static void main(String[] args) {
HTMLButtonFactory htmlButtonFactory = new HTMLButtonFactory(); htmlButtonFactory.createAndAutoClickButton();
WindowsButtonFactory windowsButtonFactory = new WindowsButtonFactory(); windowsButtonFactory.createAndAutoClickButton(); } }
|
总结
工厂方法模式适用于需要创造一系列具有相同行为的产品,提供一个抽象的通用基类
创建者子类继承基类,通过实现父类的某个抽象方法,在客户端调用基类的公共方法(会重新调用子类重写的版本)来创造出不同的,但是具有相同行为的产品