- 工厂模式专门负责将大量有共同接口的类的实例化。工厂模式可以动态决定将哪个类实例化,不必事先知道每次需要实例化哪个类。
工厂模式主要有以下几种形态:
- 简单工厂模式(Simple Factory):又称静态工厂方法(Static Factory Method)模式。
- 工厂模式(Factory Method):又称多态性工厂(Ploymorphic Factory)模式或虚拟构造函数(Virtual Constructor)模式。
- 抽象工厂(Abstract Factory)模式:又称工具箱(Toolkit)模式。
本文将简单工厂模式。
一:引入
public class Client...{
public Fruit getEatFruit(String type)
...{
Fruit fruit=null;
if (type.equals("apple"))
...{
fruit=new Apple();
}
else if (type.equals("banana"))
...{
fruit=new Banana();
}
else if (type.equals("grape"))
...{
fruit=new Grape();
}
fruit.pick();
fruit.peel();
return fruit;
}
}
/**//*此段代码的问题:
1:如果有新的水果类型需要加入的化必须修改创建Fruit那段代码,在整个以上代码中这段创建Fruit代码那段是可能会变的,根据encapsulate what varies原则,OCP.原则,这段代码需要提出来。
2:创建Fruit这段代码可能在其他地方也会用到(Client2,Client3...),所以这种公共的代码需要单独提出来,而不是分散到各个客户类中。
*/
//修改如下
public class FruitFactory ...{
public static Fruit createFruit(String type)
...{
Fruit fruit=null;
if (type.equals("apple"))
...{
fruit=new Apple();
}
else if (type.equals("banana"))
...{
fruit=new Banana();
}
else if (type.equals("grape"))
...{
fruit=new Grape();
}
//增加一种product,只要修改此一处即可,客户代码不用修改
else if (type.equals("orange"))
...{
fruit=new Orange();
}
return fruit;
}
}
public class Client...{
/**//* public Fruit getEatFruit(String type)
{
Fruit fruit=null;
if (type.equals("apple"))
{
fruit=new Apple();
}
else if (type.equals("banana"))
{
fruit=new Banana();
}
else if (type.equals("grape"))
{
fruit=new Grape();
}
fruit.pick();
fruit.peel();
return fruit;
}*/
public Fruit getEatFruit(String type)
...{
Fruit fruit=FruitFactory.createFruit(type);
fruit.pick();
fruit.peel();
return fruit;
}
}
二:结构
工厂类角色Creator (FruitFactory):工厂类在客户端的直接调用下创建产品对象。
抽象产品角色Abstract Product (Fruit):定义简单工厂创建的对象的父类或它们共同拥有的接口。可以是一个类、抽象类或接口。
具体产品角色ConcreteProduct (Apple, Banana):定义工厂具体加工出的对象。
简单抽象模式的其他形态
- 在有些情况下Simple Factory可以由抽象产品角色扮演,一个抽象产品类同时是子类的工厂
- 三个角色全部合并:
三:实际应用
- java.text.DateFormat:用此类或其子类格式化日期或时间。
public abstract class DateFormat extends Format ...{
public final static DateFormat getDateInstance()
...{
return get(0, DEFAULT, 2, Locale.getDefault());
}
private static DateFormat get(int timeStyle, int dateStyle,
int flags, Locale loc) ...{
if ((flags & 1) != 0) ...{
if (timeStyle < 0 || timeStyle > 3) ...{
throw new IllegalArgumentException("Illegal time style " + timeStyle);
}
} else ...{
timeStyle = -1;
}
if ((flags & 2) != 0) ...{
if (dateStyle < 0 || dateStyle > 3) ...{
throw new IllegalArgumentException("Illegal date style " + dateStyle);
}
} else ...{
dateStyle = -1;
}
try ...{
return new SimpleDateFormat(timeStyle, dateStyle, loc);
} catch (MissingResourceException e) ...{
return new SimpleDateFormat("M/d/yy h:mm a");
}
}
}
/**//*
说明:getDateInstance()返回一个DateFormat 实例,实际上最终是new SimpleDateFormat(timeStyle, dateStyle, loc);
SimpleDateFormat是DateFormat的子类。
这样加入新的子类eg:OtherDateFormat时对客户代码没有影响。
Factory角色:DateFormat
Abstract Product角色:DateFormat
Concrete Product角色:SimpleDateFormat
*/
四:优缺点
- 优点:
工厂类含有必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例,客户端可以免除直接创建产品对象的责任,而仅仅"消费"产品。简单工厂模式通过这种做法实现了对责任的分割。 - 缺点:
- 当
分享到:
相关推荐
**简单工厂模式**是软件设计模式中的一种,属于创建型模式。在Java编程中,它是一种用于创建对象的简便方法,将对象的实例化过程封装到一个单独的工厂类中,使得客户端代码无需直接调用具体类的构造函数,而是通过...
Simple Factory模式: 定义创建对象的接口,并封装对象的创建。 一般情况下,我们为了提高内聚和松耦合,经常会使用多态来处理一些问题。抽象出一些类的公共接口作为抽象基类或者接口。这样的话,我们将会面临一个...
在某些情况下,可以考虑使用其他创建型模式,如工厂方法模式、抽象工厂模式或构建者模式,以适应更复杂的需求。例如,工厂方法模式允许子类决定具体的产品实例,而抽象工厂模式则处理一组相关的或相互依赖的对象的...
简单工厂模式是软件设计模式中的一种基础模式,它属于创建型模式,主要解决对象的创建问题,使得代码在创建对象时更加灵活,同时也隐藏了对象的创建细节。在这个模式中,一个专门的工厂类负责创建特定类型的对象,而...
简单工厂模式是面向对象设计模式中的一种,它属于创建型模式,主要解决的是在系统中如何创建对象的问题。设计模式是软件开发中的经验总结,旨在提高代码的可重用性、可读性和可维护性。 在简单工厂模式中,一个工厂...
简单工厂模式是一种创建型设计模式,它提供了一个创建对象的接口,但允许子类决定实例化哪一个类。这种类型的设计模式属于简单工厂模式,也被称为静态工厂方法模式。在这个例子中,我们有一个计算器程序,它是通过...
简单工厂模式是一种设计模式,它是创建型模式的一种,主要用于简化对象的创建过程。在这个`simple-factory-demo.zip`压缩包中,我们很可能会找到一个示例程序,它演示了如何在实际代码中应用简单工厂模式。 简单...
【描述】"Simple Factory Design-Pattern for Calculate Salary for VC6 project" 描述了项目的核心设计思想——简单工厂模式。这是一种创建型设计模式,它提供一个创建对象的接口,但允许子类决定实例化哪一个类。...
在Java中,简单工厂模式适用于对象的创建过程较为固定或不复杂的情况。它定义一个公共的工厂类,根据传入的参数或者条件来决定返回哪个具体类的实例。这种方式降低了代码的耦合度,使得在不修改客户端代码的情况下,...
1. **简单工厂模式**(Simple Factory Pattern):由一个静态方法或单例类负责创建对象,适用于对象种类较少且不会频繁变动的情况。 2. **工厂方法模式**(Factory Method Pattern):定义一个创建对象的接口,让...
在软件设计模式中,工厂模式是一种非常常用的行为型模式,它的主要目的是为了隔离对象的创建过程,使得客户端代码不直接创建对象,而是通过一个工厂类来负责对象的创建。这样可以使得系统更具可扩展性和可维护性。...
工厂模式是设计模式中的一种,属于创建型模式,它的主要目的是为了封装对象的创建过程,提供一个统一的接口来生成不同类型的实例,而无需暴露具体的创建逻辑。这篇教程将深入探讨工厂模式的基础知识,帮助你理解和...
简单工厂(Simple Factory)模式又称为静态工厂方法(Static Factory Method)模式,属于类的创建型模式,通常它根据自变量的不同返回不同的类的实例。 简单工厂模式的实质是由一个工厂类根据传入的参量,动态决定...
总的来说,Java工厂模式SimpleFactory是一种实用的设计模式,能够帮助我们更好地管理对象的创建过程,提高代码的可维护性和可扩展性。通过将对象的创建过程封装在工厂类中,我们可以在不修改客户端代码的情况下,...
工厂模式是一种常用的面向对象设计模式,它属于创建型设计模式,旨在提供一种创建对象的最佳方式。在工厂模式中,当客户端请求创建一个产品对象时,它不会直接创建,而是调用一个专门的工厂对象来完成这个任务。这样...
简单工厂模式是面向对象设计中的一种经典设计模式,它属于创建型模式,主要用来解决对象的创建问题。在Java编程中,简单工厂模式通过一个中心工厂类来负责创建相关的对象,而无需让客户端代码直接new具体的产品类。...