java的工厂模式(备忘)

来源:互联网 发布:redhat7 yum源配置 编辑:程序博客网 时间:2024/05/22 00:53

一、java工厂模式

1、一般情况下,我们如果调用接口,就会知道它的实现方法,比如:

UserDao ud=new UserDaoImpl();这样就跟我们设计接口相背离,接口的思想就是“封装隔离”,通常提到的封装是对数据的封装,但是这里的封装是指“对被隔离体的行为的封装”,或者是“对被隔离体的职责的封装”;而隔离指的是外部调用和内部实现,外部调用只能通过接口进行调用,而外部调用是不知道内部具体实现的,也就是说外部调用和内部实现是被接口隔离开的。


在java程序设计里面,非常讲究层的划分和模块的划分。通常按照三层来划分java程序,分别是表现层、逻辑层、数据层,它们之间都是用接口来通讯的。


图1 基本的三层结构示意图


图2 一个层内部的各个模块交互示意图

所谓组件,从设计上讲,组件就是能完成一定功能的封装体,小到一个类,大到一个系统,都可以称为组件,因为一个小系统放到更大的系统里面去,也就是当个组件而已。

2、问题:在java编程中,出现只知道接口而不知道实现,该怎么办?就像上述的例子,在client中,它知道要使用UserDao接口,但是不知道由谁实现,也不知道如何实现,从而得不到接口对象,就无法使用该接口,该怎么办?这个问题的一个合理解决方案就是简单工厂。

3、简单工厂:

3.1、什么是简单工厂:提供一个创建对象实例的功能,而无须关心起具体实现。被创建实例的类型可以使接口、抽象类,也可以是具体的类。

3.2、分析上面的问题,虽然不能让模块外部知道模块内的具体实现,但是模块内部是可以知道实现类的,而且创建接口是需要具体实现类的。

那么在模块内部新创建一个类,在这个类里面来创建接口,然后把创建好的接口返回给客户端,这样外部应用就只需要根据这个类来获取相应的接口对象,然后就可以操作接口定义的方法了。把这样的对象称为简单工厂,就叫做Factory吧。

这样一来,客户端就可以通过这个Factory来获取需要的接口对象,然后调用接口的方法来实现需要的功能,而且客户端也不用在关心具体实现了。

3.3、简单工厂结构和说明


图3 简单工厂的结构

这个,用了Factory,就不需要在UserDao ud=new UserDaoImpl(),不需要new了,这个直接调用Factory.createXXX就行了。

原创粉丝点击