工厂模式的主要应用场合:
模块间调用时模块可选择的接口很多(可根据不同的情况进行不同的选择,程序的可扩充性比较强);
或者实例化一个对象时需要进行比较复杂的操作(不仅仅是普通的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
分享到:
相关推荐
JAVA设计模式(01):创建型-工厂模式【简单工厂模式】(Simple Factory)
工厂模式主要是为创建对象提供了接口。工厂模式按照《Java 与模式》中的提法分为三类: 1. 简单工厂模式(Simple Factory) 2. 工厂方法模式(Factory Method) 3. 抽象工厂模式(Abstract Factory) 这三种模式从上到...
2、工厂方法模式(Factory Method Pattern) 用意:让每个具体工厂生产具体产品
Factory Method 工厂方法模式(创建型模式).wmv
3、抽象工厂模式(Abstract Factory Pattern) 用意:一个工厂生产一系列产品
Abstract Factory模式 1 定义创建对象的接口,并封装对象的创建 2 将具体化类的工作延迟到了类中 3 创建创建一组相关对象或者说是一组相互依赖的对象 一般情况下,我们为了提高内聚和松耦合,经常会使用多态来...
抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,属于对象创建型模式。
NULL 博文链接:https://jacky-dai.iteye.com/blog/1927487
Simple Factory模式: 定义创建对象的接口,并封装对象的创建。 一般情况下,我们为了提高内聚和松耦合,经常会使用多态来处理一些问题。抽象出一些类的公共接口作为抽象基类或者接口。这样的话,我们将会面临一个...
C#面向对象设计模式纵横谈:Factory Method 工厂方法模式(创建型模式)
参考如下博客,亲自实践了一个QT的工厂模式,亲测可用,编译运行实测。 我用qt5.6,在windows下编译并运行测试,正常。 https://blog.csdn.net/baidu_33570760/article/details/71159808 1. Qt工厂模式源码 2. C++...
Complex Factory模式 1 定义创建对象的接口,并封装对象的创建 2 将具体化类的工作延迟到了类中 一般情况下,我们为了提高内聚和松耦合,经常会使用多态来处理一些问题。抽象出一些类的公共接口作为抽象基类或者...
C#面向对象设计模式纵横谈(5):Factory Method 工厂方法模式(创建型模式) (Level 300)
从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂...
C#面向对象设计模式纵横谈(3):Abstract Factory 抽象工厂模式(创建型模式) (Level 300)
java 创建型模式--工厂模式(Factory Pattern)示范代码demo,关于工厂模式可以查看我的博客 http://blog.csdn.net/u012930316/article/details/54599580
C#面向对象设计模式纵横谈(3):Abstract Factory 抽象工厂模式(创建型模式) 体验课程
C#面向对象设计模式纵横谈(3):Abstract Factory 抽象工厂模式(创建型模式)
抽象工厂模式(Abstract Factory Pattern) 引入: 在前面介绍的两个创建型模式里面,我们解决的都是有关"new"的问题,用它们来避免显式指定类创建对象。我写的也非常简单易懂,相信看过的朋友们都应该对简单工厂...
C#面向对象设计模式纵横谈(5):Factory Method 工厂方法模式(创建型模式) 体验课程