简单工厂的缺点
上面我们谈了简单工厂的优点和扩展。下面我们来看看简单工厂的缺点。有一个被认为最不好的缺点,就是不符合OCP原则。也就是说,当你增加一个新类时,你必须修改工厂方法,添加一段处理代码。这不符合,已有代码尽可能不改变的原则。于是工厂方法模式应运而生了。
工厂方法模式的优点
既然上面简单工厂的缺点是不能够做到OCP,那么工厂方法的优点就是满足OCP原则。
工厂方法模式的实现
一个简单的例子是一个体育组织。假设有一个体育协会,协会记录所有的运动员,篮球的前锋、中锋和后卫;足球的前锋、中锋和后卫。如果组织里的人不太多,那无疑的,简单工厂就可以满足了。但是会员越来越多,后来就划分成多个协会:足球协会、篮球协会、乒乓球协会等等。这样相当于有很多个小工厂了。如果原来使用简单工厂,就直接根据变量决定返回何种运动员子类。现在使用工厂方法,我们来实现一下。
运动员.java
public interface 运动员 {
public void 跑();
public void 跳();
}
足球运动员.java
public class 足球运动员 implements 运动员 {
public void 跑(){
//跑啊跑
}
public void 跳(){
//跳啊跳
}
}
篮球运动员.java
public class 篮球运动员 implements 运动员 {
public void 跑(){
//do nothing
}
public void 跳(){
//do nothing
}
}
体育协会.java
public interface 体育协会 {
public 运动员 注册();
}
足球协会.java
public class 足球协会 implements 体育协会 {
public 运动员 注册(){
return new 足球运动员();
}
}
篮球协会.java
public class 篮球协会 implements 体育协会 {
public 运动员 注册(){
return new 篮球运动员();
}
}
俱乐部.java
public class 俱乐部 {
private 运动员 守门员;
private 运动员 后卫;
private 运动员 前锋;
public void test() {
体育协会 中国足协 = new 足球协会();
this.前锋 = 中国足协.注册();
this.后卫 = 中国足协.注册();
前锋.跑();
后卫.跳();
}
}
上面的实现过程一定要关注到一件事,就是所有的工厂返回的对象都必须是运动员,也就是抽象工厂接口中定义的返回类型。上面的处理,在以后需要增加乒乓球协会时只需要添加下面的具体工厂类和具体的乒乓球运动员类。原代码无需改变。于是满足了OCP的原则。
乒乓球协会.java
public class 乒乓球协会 implements 体育协会 {
public 运动员 注册(){
return new 乒乓球运动员();
}
}
除了上面说的这些之外,我们还可以把各个协会的具体实现做成简单工厂方式的。这样如果只剩一个工厂时就退化成简单工厂了。
工厂方法的缺点
工厂方法的缺点主要是结构复杂,代码量比较大,非静态调用。如果你使用简单工厂可以满足需要,就直接使用简单工厂吧!
分享到:
相关推荐
创建型设计模式---工厂设计模式实现
在标题“c++设计模式-工厂方法模式”中,我们关注的是如何在C++中实现工厂方法这一设计模式。工厂方法模式的核心思想是定义一个创建对象的接口,但让子类决定实例化哪一个类。这样,工厂方法可以使类的实例化过程...
java设计模式----抽象工厂模式,简单工厂模式代码 代码内部
NET设计模式--工厂方法例子源码
抽象工厂模式是设计模式中的一种创建型模式,它提供了一个创建对象族的接口,而无需指定它们的具体类。在.NET开发中,这种模式常用于实现多数据库连接,比如连接到MySQL、SQL Server或Oracle等不同的数据库系统。...
工厂方法模式是设计模式中的创建型模式,它提供了一种创建对象的最佳方式。在这个模式中,一个类(称为工厂类)不再直接实例化具体的产品,而是定义一个接口或抽象类,由子类来决定实例化哪一个类。这样做的好处在于...
在软件设计模式中,工厂模式是一组非常基础且实用的设计模式,主要分为简单工厂模式、工厂方法模式和抽象工厂模式。这些模式都是为了解决对象创建的问题,通过封装对象的创建过程,使得代码更加灵活,易于扩展和维护...
《设计模式——工厂模式》 在软件工程领域,设计模式是一种在特定情境下解决常见问题的模板,它为程序员提供了一种标准的解决方案。工厂模式是面向对象设计中最为人熟知的设计模式之一,属于创建型模式,其主要目标...
设计模式---抽象工厂模式(Abstract Factory)-UML图 (StarUML)
《C++设计模式--基于Qt4开源跨平台开发框架》一书主要探讨了如何在C++编程中利用设计模式,并结合Qt4框架进行高效的跨平台应用开发。设计模式是软件工程中的重要概念,它们是经过时间和实践验证的解决特定问题的模板...
标题"我讲设计模式--工厂方法"暗示我们将深入探讨工厂方法的设计模式及其应用。这篇博文可能涉及了该模式的基本概念、工作原理以及实际场景下的使用示例。遗憾的是,由于没有直接提供博客的具体内容,我将基于工厂...
在软件工程领域,设计模式是一种解决常见问题的模板或最佳实践,它被广泛应用于构建可扩展、可维护的高质量代码。"抽象工厂"是设计模式中的一种,属于创建型模式,它提供了一种创建对象族的接口,而无需指定它们的...
**工厂方法设计模式** 在iOS开发中,设计模式是一种被广泛采用的最佳实践,它提供了一种在不指定具体实现的情况下创建对象的方式。工厂方法(Factory Method)是面向对象设计模式中的一种,属于创建型模式。它定义...
工厂方法模式是面向对象设计中的一种经典设计模式,属于创建型模式。在软件工程中,当我们需要创建一系列相关或相互依赖的对象时,而不希望指定具体的类,工厂方法模式提供了一个很好的解决方案。 工厂方法模式的...
简单工厂模式是软件设计模式中的一种基础模式,它属于创建型模式,主要解决对象的创建问题,使得代码在创建对象时更加灵活,同时也隐藏了对象的创建细节。在这个模式中,一个专门的工厂类负责创建特定类型的对象,而...
JAVA-设计模式-创建型模式-工厂模式
Java设计模式中的工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。工厂模式的核心思想是将对象的创建过程封装起来,使得创建过程独立于使用过程,从而提高了代码的可扩展性和可维护性。在HeadFirst...