首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >请举一个工厂方法模式的例子

请举一个工厂方法模式的例子
EN

Stack Overflow用户
提问于 2015-06-24 12:17:49
回答 2查看 1K关注 0票数 3

我读到了factory模式和factory method模式的区别。

工厂方法模式将对象的实例化推迟到子类。它也是一个Factory方法,因为“Creator”的子类负责实现“Create”方法。

其中一个简单的工厂是由想要创建对象的类直接调用的。

但对于工厂模式,我们也可以通过反射添加类注册来解耦工厂类,并为要创建的对象使用一层子类,并将对象实例化逻辑保留在该子类中。

我没有得到符合上述工厂方法模式定义的工厂方法模式的示例。

你能给我一个工厂方法的例子吗?

EN

回答 2

Stack Overflow用户

发布于 2015-06-24 14:08:10

假设我们想要生产水果:

代码语言:javascript
运行
复制
    public interface Fruit {
        public void plant();
        public void grow();
    }

    // concrete fruit Apple
    public class Apple implements Fruit {
        @Override
        public void plant() {
            System.out.println("Apple is planted.");
        }
        @Override
        public void grow() {
            System.out.println("Apple is growing.");
        }
    }

    // concrete fruit Banana
    public class Banana implements Fruit {
        @Override
        public void plant() { ... }
        @Override
        public void grow() { ... }
    }

工厂模式中,有一个工厂类负责生成新实例。的缺点是,如果添加了一种类型的实例,则必须更改工厂类的逻辑。

示例:

代码语言:javascript
运行
复制
// Factory class
public class FruitGarden {
    public static Fruit createFruit(String fruitName) throws Exception {
        if(fruitName.equals("Apple")) {
            return new Apple();
        } else if(fruitName.equals("Banana")) {
            return new Banana();
        } else {
            System.out.printf("Sorry! %s not supported.\n", fruitName);
            throw new Exception();
        }
    }
    /* another way to create instance
    public static Fruit createApple() {
        return new Apple();
    }
    public static Fruit createBanana() {
        return new Banana();
    }
    */
}

工厂方法模式中,有一个抽象工厂表示新实例的创建。不同的具体工厂会创建不同类型的实例。所有这些具体工厂都实现了抽象工厂接口或扩展了抽象工厂类。如果增加了一个新的类型,只需要增加一个具体的工厂,所以它有更多的可扩展性

示例:

代码语言:javascript
运行
复制
// abstract factory interface
public interface FruitGarden {
    public Fruit createFruit();
}

// concrete factory which is responsible producing Apple
public class AppleGarden implements FruitGarden {
    @Override
    public Fruit createFruit() {
        return new Apple();
    }
}

// concrete factory which is responsible producing Banana
public class BananaGarden implements FruitGarden {
    @Override
    public Fruit createFruit() {
        return new Banana();
    }
}
票数 2
EN

Stack Overflow用户

发布于 2015-06-24 13:33:51

Java的Collection.iterator()是一个工厂方法。

集合的具体实现决定了此方法返回的具体迭代器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31017531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档