简单工厂的缺点就是扩展性不强,当有新的类型产生的时候,将对负责生产的主类进行修改。主类负责太多的业务逻辑,要避免这种情况的产生,就是将生产类功能抽象化。还是以上文中的水果为例子:
水果接口:
package 工厂模式.工厂方法;
public interface Fruit {
void grow();
void harvest();
void plant();
}
苹果:
package 工厂模式.工厂方法;
public class Apple implements Fruit {
public void grow() {
System.out.println("apple grow");
}
public void harvest() {
System.out.println("apple harvest");
}
public void plant() {
System.out.println("apple plant");
}
}
香蕉:
package 工厂模式.工厂方法;
public class Banana implements Fruit {
public void grow() {
System.out.println("Banana grow");
}
public void harvest() {
System.out.println("Banana harvest");
}
public void plant() {
System.out.println("Banana plant");
}
}
生产工厂(农夫)
package 工厂模式.工厂方法;
public interface FruitGardener {
public Fruit factory();
}
这个类和简单工厂的农夫类有很大的不同,区别就在这个类将生产的功能抽象化了,继而产生的是生产各种水果的工厂,例如生产苹果,不由农夫生产了,而是由农夫生产苹果共产,由苹果工厂去生产苹果。这种做法的扩展性非常的强。
苹果工厂:
package 工厂模式.工厂方法;
public class AppleGardener implements FruitGardener {
public Fruit factory() {
// TODO Auto-generated method stub
return new Apple();
}
}
香蕉工厂:
package 工厂模式.工厂方法;
public class BananaGardener implements FruitGardener {
public Fruit factory() {
// TODO Auto-generated method stub
return new Banana();
}
}
客户端:
package 工厂模式.工厂方法;
public class Client {
public static void main(String[] args) {
FruitGardener applegardener = new AppleGardener();
Apple apple = (Apple) applegardener.factory();
apple.plant();
}
}
工厂方法灵活运用了继承的原理,通过客户要生产什么类型的水果,从而去拿具体生产水果的实例工厂。如果系统需要加入一个新的产品,那么所需要的就是向系统中加入一个这个产品的对应的工厂类,没必要去修改客户端。完全支持开闭原则。
分享到:
相关推荐
在软件设计模式中,工厂模式是一组非常基础且实用的设计模式,主要分为简单工厂模式、工厂方法模式和抽象工厂模式。这些模式都是为了解决对象创建的问题,通过封装对象的创建过程,使得代码更加灵活,易于扩展和维护...
JAVA工厂模式工厂方法模式.pdf
工厂模式分为三种主要类型:简单工厂模式、工厂方法模式和抽象工厂模式。 1. **简单工厂模式** 简单工厂模式是最简单的工厂模式实现,它提供一个静态方法或者类来创建对象,这个类通常被称为“工厂”。用户只需要...
JAVA工厂模式工厂方法模式[整理].pdf
工厂方法模式和抽象工厂模式是两种常见的设计模式,它们都属于创建型模式,用于解决对象的创建问题。在软件设计中,这两种模式都是用来隔离对象的创建和使用,以提高系统的灵活性和可扩展性。 首先,工厂方法模式的...
java设计模式 工厂方法模式uml类图,一张图就让你秒懂工厂方法模式
本文将探讨三个重要的设计模式:抽象工厂模式、工厂方法模式以及策略模式,并结合一个实际的场景——手机加工厂,来具体阐述它们的应用。 首先,我们来看**抽象工厂模式**。这个模式主要用于创建相关或依赖对象的...
工厂方法模式作为创建型模式中的一种,提供了一种创建对象的优雅方式,它不仅使对象的创建与使用分离,还极大地提高了系统的扩展性和灵活性。本文将深入探讨工厂方法模式的内部机制,以及通过反射和配置文件技术增强...
工厂模式分为三种主要形态:简单工厂模式、工厂方法模式和抽象工厂模式。 1. 简单工厂模式:也称为静态工厂方法模式,它通过一个静态方法来创建对象。在这个例子中,`FruitGardener` 类就是简单工厂,它根据输入的...
本文将深入探讨三种工厂模式:简单工厂模式、工厂方法模式以及抽象工厂模式,并结合源码分析其应用场景和优缺点。 1. 简单工厂模式 简单工厂模式(Simple Factory Pattern)是一种静态工厂方法,它通过一个公共的...
在软件设计模式中,工厂方法模式(Factory Method Pattern)和抽象工厂模式(Abstract Factory Pattern)是两种常用的创建型设计模式,它们都属于“工厂”家族,但有着不同的应用场景和目标。 工厂方法模式的核心...
本文将深入探讨Java中的工厂模式,包括基本的工厂模式、抽象工厂模式以及工厂方法模式。 **工厂模式**:工厂模式的核心思想是提供一个创建对象的接口,但让实现这个接口的类来决定实例化哪一个类。这样,客户端无需...
工厂模式分为三种主要类型:简单工厂模式、普通工厂模式(也称为工厂方法模式)和抽象工厂模式。 1. **简单工厂模式**: - 简单工厂模式中,有一个中心工厂类,它负责根据输入条件(通常是一个参数)来创建具体的...
工厂方法模式是一种设计模式,属于创建型模式,它提供了一种创建对象的最佳方式。在工厂方法模式中,当我们创建对象时,不会直接实例化具体的产品类,而是通过一个工厂类来创建。这样做的好处是,当需要添加新的产品...
同时,工厂方法模式也可以避免简单工厂模式的缺点,即当有新产品要加入到系统中时,必须对工厂类进行修改,以加入必要的处理逻辑。 工厂方法模式适合在如下场合中运用: * 当无法得知必须创建的对象属于哪个类的...
工厂方法模式是面向对象设计模式中的行为模式,它属于创建型模式的一种,主要解决的是当一个类不知道它所必须创建的对象的类的时候,或者当一个类希望由它的子类来决定实例化哪个类的时候,如何封装这个实例化过程的...
工厂方法模式是面向对象设计模式中的一种,它属于创建型模式,主要解决的是当系统需要创建的对象具有多种类型,而具体创建哪种类型的对象在运行时才能确定的问题。在这个压缩包中,`FactoryMethod`可能包含了Java...
在这个压缩包中,包含了三种工厂模式的C++实现:简单工厂模式、工厂方法模式以及抽象工厂模式。让我们一一探讨这些模式。 1. 简单工厂模式: 简单工厂模式是一种静态工厂方法,它提供一个公共的工厂类来创建对象。...
参考如下博客,亲自实践了一个QT的工厂模式,亲测可用,编译运行实测。 我用qt5.6,在windows下编译并运行测试,正常。 https://blog.csdn.net/baidu_33570760/article/details/71159808 1. Qt工厂模式源码 2. C++...
本篇文章将对三种主要的工厂模式:简单工厂、工厂方法和抽象工厂进行深入的对比和总结。 **简单工厂模式** 是最基础的工厂模式形式,它提供一个静态方法或类来创建对象。在这个模式中,工厂是负责创建对象的中心...