Chinaunix首页 | 论坛 | 博客
  • 博客访问: 332498
  • 博文数量: 31
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1134
  • 用 户 组: 普通用户
  • 注册时间: 2013-08-25 09:41
个人简介

目前任职于搜狐~

文章分类

全部博文(31)

文章存档

2014年(12)

2013年(19)

分类: Java

2013-11-30 15:49:02

简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例,看如下代码实现
第一个文件:IDB.java

点击(此处)折叠或打开

  1. public interface IDB {

  2.     public void add();
  3.     
  4.     public void update();
  5.     
  6.     public void query();
  7.     
  8.     public void delete();
  9. }
2、第二个文件MySqlDB.java

点击(此处)折叠或打开

  1. public class MySqlDB implements IDB {

  2.     @Override
  3.     public void add() {
  4.         System.out.println("MySQL -- add()");
  5.     }

  6.     @Override
  7.     public void delete() {
  8.         System.out.println("MySQL -- delete()");
  9.     }

  10.     @Override
  11.     public void query() {
  12.         System.out.println("MySQL -- query()");
  13.     }

  14.     @Override
  15.     public void update() {
  16.         System.out.println("MySQL -- update()");
  17.     }
  18. }
3、第三个文件OracleDB.java

点击(此处)折叠或打开

  1. public class OracleDB implements IDB {

  2.     @Override
  3.     public void add() {
  4.         System.out.println("Oracle -- add()");
  5.     }

  6.     @Override
  7.     public void delete() {
  8.         System.out.println("Oracle -- delete()");
  9.     }

  10.     @Override
  11.     public void query() {
  12.         System.out.println("Oracle -- query()");
  13.     }

  14.     @Override
  15.     public void update() {
  16.         System.out.println("Oracle -- update()");
  17.     }
  18.     
  19. }
4、第四个文件DBFactory.java

点击(此处)折叠或打开

  1. import com.test.product.IDB;
  2. import com.test.product.impl.MySqlDB;
  3. import com.test.product.impl.OracleDB;

  4. /**
  5.  * 简单工厂
  6.  */
  7. public class DBFactory {

  8.     public IDB getDB(String type){
  9.         if("mysql".equals(type)){
  10.             return new MySqlDB();
  11.         }else{
  12.             return new OracleDB();
  13.         }
  14.     }
  15. }
5、第五个文件TestMain.java

点击(此处)折叠或打开

  1. import com.test.product.IDB;

  2. public class TestMain {

  3.     public static void main(String [] args){
  4.         DBFactory factory = new DBFactory();
  5.         IDB db = factory.getDB("mysql");
  6.         db.add();
  7.     }
  8. }
6、简单工厂模式优缺点
优点:工厂类是整个模式的关键.包含了必要的逻辑判断,根据外界给定的信息,决定究竟应该创建哪个具体类的对象.通过使用工厂类,外界可以从直接创建具体产品对象的尴尬局面摆脱出来,仅仅需要负责“消费”对象就可以了。而不必管这些对象究竟如何创建及如何组织的.明确了各自的职责和权利,有利于整个软件体系结构的优化。
缺点:由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则,将全部创建逻辑集中到了一个工厂类中;它所能创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类了。
7、简单工厂模式的使用场景
(1)、工厂类负责创建的对象比较少;
(2)、客户只知道传入工厂类的参数,对于如何创建对象(逻辑)不关心;
(3)、由于简单工厂很容易违反高内聚责任分配原则,因此一般只在很简单的情况下应用。
阅读(2802) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~