创建型模式: Factory Method(工厂方法)

来源:互联网 发布:压声喊麦软件效果器 编辑:程序博客网 时间:2024/06/07 07:26

设计模式: http://zh.wikipedia.org/wiki/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F_(%E8%AE%A1%E7%AE%97%E6%9C%BA)

工厂方法模式:http://zh.wikipedia.org/wiki/%E5%B7%A5%E5%8E%82%E6%96%B9%E6%B3%95%E6%A8%A1%E5%BC%8F




//几个Button类abstract class Button{    public abstract void showInfo();}class WinButton extends Button{    public void showInfo() {        System.out.println("this is a WinButton");    }}class MacButton extends Button{    public void showInfo() {        System.out.println("this is a MacButton");    }} //它们的工厂类interface ButtonFactory{    abstract Button createButton();}class WinButtonFactory implements ButtonFactory{    public Button createButton(){         return new WinButton();    }}class MacButtonFactory implements ButtonFactory{    public Button createButton(){
        //如果需要复用部分创建代码,WinButtonFactory需要定义为抽象类,并实现复用创建代码。
        return new MacButton();    }}// Clientpublic class FactoryExample{     public static void main(String args[]){          ButtonFactory bf1 = new WinButtonFactory();          Button btn1 = bf1.createButton();          btn1.showInfo();                    ButtonFactory bf2 = new MacButtonFactory();          Button btn2 = bf2.createButton();          btn2.showInfo();    }}

下列情况可以考虑使用工厂方法模式:

  • 创建对象需要大量重复的代码。
  • 创建对象需要访问某些信息,而这些信息不应该包含在复合类中。
  • 创建对象的生命周期必须集中管理,以保证在整个程序中具有一致的行为。
Q:createButton放在各自的工厂类(WinButtonFactoryMacButtonFactory)有什么好处?
A:1)隔离创建过程 2)重复代码可在创建工厂中复用 3)延迟创建
Q:工厂方法模式的缺陷?
A:需要预先定义各个子类的创建方法。

原创粉丝点击