工厂模式的主要应用场合:
模块间调用时模块可选择的接口很多(可根据不同的情况进行不同的选择,程序的可扩充性比较强);
或者实例化一个对象时需要进行比较复杂的操作(不仅仅是普通的new一下,可能有准备或者收尾工作等)。
工厂模式的优缺点:
优点:客户类和工厂类分开。客户类任何时候需要某种产品,只需向工厂请求即可。客户类无须修改就可以接纳新产品。
缺点:当产品修改时,工厂类也要做相应的修改。如:产品如何创建及如何向客户端提供。
举例(摘自网络):
追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory。
<!----><!---->
<!---->
1.没有使用工厂模式:
package
com.javaeye.kang.factory;
/**
*
最
传统
的做法
*
不使用工厂模式
*
直接在
Action
中
new
CustomerDao
对
象,耦合度高,可
扩
充性低
*/
class
Action {
public
void
callDao() {
CustomerDao
customerDao =
new
CustomerDao();
customerDao.login();
}
}
class
CustomerDao {
public
void
login() {
System.
out
.println(
"
登
陆
"
);
}
}
public
class
FactoryTest {
public
static
void
main(String[] args) {
Action action =
new
Action();
action.callDao();
}
}
测试结果:
登
陆
|
2.使用工厂模式:
package
com.javaeye.kang.factory;
/**
*
初
步
使用工厂模式
*
1.
面向接口
编
程
*
2.
建立工厂
类
*/
class
Action {
public
void
callDao() {
//
将字符串
值
CustomerDao
传
入
dao
工厂,然后从中拿到
CustomerDao
对
象
//
也可以根据情况
传
其他
值
到
dao
工厂中去,然后从中拿到其他的
对应对
象
ICustomerDao
iCustomerDao = DaoFactory.getDao
(
"CustomerDao"
);
iCustomerDao.login();
}
}
//dao
工厂
class
DaoFactory {
public
static
ICustomerDao getDao(String daoDame)
{
if
(
"CustomerDao"
.endsWith(daoDame)) {
//
预
先准
备
工作
return
new
CustomerDao();
}
else
if
(
...
) {
Return ...
}
return
null
;
}
}
//
接口
interface
ICustomerDao {
public
abstract
void
login();
}
//
实现
接口的具体
类
class
CustomerDao
implements
ICustomerDao{
public
void
login() {
System.
out
.println(
"
登
陆
"
);
}
}
public
class
FactoryTest {
public
static
void
main(String[] args) {
Action action =
new
Action();
action.callDao();
}
}
|
3.对上一个工厂模式进行改进:
package
com.javaeye.kang.factory;
/**
*
对
上一个工厂模式
进
行改
进
*
1.
扩
大服
务对
象,将
ICustomerDao
扩
展
为
Object
*
2.
利用
类
的反射机制
获
取
对
象
*/
class
Action {
public
void
callDao() {
//
将字符串
值
CustomerDao
传
入
dao
工厂,然后从中拿到
CustomerDao
对
象
//
也可以根据情况
传
其他
值
到
dao
工厂中去,然后从中拿到其他的
对应对
象
//
强
制
类
型
转换
(从
Object
到
ICustomerDao
)
ICustomerDao
iCustomerDao = (ICustomerDao)
DaoFactory.getDao
(
"CustomerDao"
);
iCustomerDao.login();
}
}
//dao
工厂
class
DaoFactory {
public
static
Object
getDao(String daoDame) {
//
预
先的准
备
工作
//
从配置文件中
获
取
daoDame
对应
的
类
名。如果切
换
,修改配置文件中
对应
的
类
名就可以了
String className = ;
//
利用
类
的反射机制
获
取
对
象
return
Class.forName(className).getInterfaces();
}
}
//
配置文件,再
扩
展下去就是
spring
了(通
过
配置文件将
对
象注入到程序中)
//
接口
interface
ICustomerDao {
public
abstract
void
login();
}
//
实现
接口的具体
类
class
CustomerDao
implements
ICustomerDao{
public
void
login() {
System.
out
.println(
"
登
陆
"
);
}
}
public
class
FactoryTest {
public
static
void
main(String[] args) {
Action action =
new
Action();
action.callDao();
}
|
- 描述: 工厂模式
- 大小: 95.3 KB
- 描述: 工厂模式要点
- 大小: 79.3 KB
- 描述: 工厂模式小结
- 大小: 131 KB
分享到:
相关推荐
工厂方法(Factory Method)是工厂模式的一种具体实现,它是《Head First 设计模式》这本书中讲解的重点之一。在这个模式中,一个工厂类声明了一个创建对象的抽象方法,但并不实现这个方法。而是由子类决定要实例化...
在简单工厂模式中,工厂类通常是静态的,负责创建所有类型的对象,这导致在添加新产品时,需要修改工厂类。而在工厂方法模式中,每种产品都有专门的工厂类负责创建,这样就不会有这种问题。 在实际开发中,工厂方法...
工厂模式是一种常用的软件设计模式,它是创建型设计模式的一种,主要解决对象的创建问题,将对象的创建过程封装起来,使得创建过程独立于使用过程。这样可以提高代码的可复用性和灵活性,同时降低了系统的耦合度。...
**简单工厂模式**是软件设计模式中的一种,属于创建型模式。在Java编程中,它是一种用于创建对象的简便方法,将对象的实例化过程封装到一个单独的工厂类中,使得客户端代码无需直接调用具体类的构造函数,而是通过...
抽象工厂模式是设计模式中的一种创建型模式,其主要目的是为了解耦客户端代码与具体产品的实现。在软件工程中,当系统需要根据不同的平台、环境或者配置产生一系列相关对象,而这些对象之间的关系又非常复杂时,抽象...
工厂模式是一种常用的面向对象设计模式,它属于创建型设计模式,旨在提供一种创建对象的最佳方式。在工厂模式中,当客户端请求创建一个产品对象时,它不会直接创建,而是调用一个专门的工厂对象来完成这个任务。这样...
本篇文章将详细探讨"设计模式之Factory",它是一种非常基础且重要的创建型设计模式。 Factory模式的核心思想是提供一个接口或者抽象类,用于创建某一类对象,但允许其子类决定实例化哪一个类。这种模式使得创建过程...
抽象工厂模式是设计模式中的一种,它属于对象创建型模式,主要解决的是当系统需要创建一组相关或相互依赖的对象时,而这些对象的类在运行时可能未知的问题。这种模式提供了一个接口,用于创建相关或依赖对象的家族,...
3. **抽象工厂模式(Abstract Factory)**:不仅关注单一类别的对象创建,还关注一系列相关对象的创建。 #### 二、工厂模式简介 工厂模式的主要目标是为创建对象提供一个统一的接口。这种模式的关键在于隐藏创建...
1. **模式结构**:抽象工厂模式通常包括抽象工厂接口(AbstractFactory),具体工厂类(ConcreteFactory),抽象产品接口(Product)以及具体产品类(ConcreteProduct)。抽象工厂定义了创建产品的方法,而具体工厂...
工厂方法模式是面向对象设计模式中的行为型模式之一,它提供了一种创建对象的最佳方式。在工厂方法模式中,一个工厂类负责创建对象,而具体的创建过程被延迟到了子类中,使得子类可以在不修改原有代码的基础上决定...
Factory Method 工厂方法模式(创建型模式).wmv
抽象工厂模式是设计模式中的一种创建型模式,它提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。这种模式的关键在于抽象工厂,它定义了一组创建对象的接口,允许子类决定实例化哪一个类。...
工厂方法模式是设计模式中的创建型模式之一,它在软件工程中扮演着非常重要的角色,尤其是在C#这样的面向对象编程语言中。工厂方法模式提供了一种封装对象创建过程的方法,使得具体的创建过程延迟到子类中进行,从而...
抽象工厂模式是工厂方法模式的进一步扩展,它提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。这在处理不同平台或环境下的产品族时非常有用。在Java中,我们可以通过创建抽象工厂类和具体...
Abstract Factory模式 1 定义创建对象的接口,并封装对象的创建 2 将具体化类的工作延迟到了类中 3 创建创建一组相关对象或者说是一组相互依赖的对象 一般情况下,我们为了提高内聚和松耦合,经常会使用多态来...
1. **抽象工厂(Abstract Factory)**:这是工厂模式的核心接口,定义了创建产品对象的公共接口。在C++中,通常用抽象类或者纯虚函数接口来表示。 2. **具体工厂(Concrete Factory)**:实现了抽象工厂接口,负责...
工厂模式是一种常用的面向对象设计模式,属于创建型模式之一。它的主要目的是为了解决在软件开发过程中频繁创建对象的问题,并提供了一种更加灵活的方式来创建对象。 #### 1.2 特点 - **封装性**:通过将对象的创建...