工厂模式(一)

一、分类

   工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。

 

1)简单工厂模式(Simple Factory):不利于产生系列产品;

2)工厂方法模式(Factory Method):又称为多形性工厂;

3)抽象工厂模式(Abstract Factory):又称为工具箱,产生产品族,但不利于产生新的产品;

这三种模式从上到下逐步抽象,并且更具一般性。GOF在《设计模式》一书中将工厂模式分为两类:工厂方法模式(Factory Method)与抽象工厂模式(Abstrac Factory)。将简单工厂模式(Simple Factory)看为工厂方法模式的一种特例,两者归为一类。

二、简单工厂模式

    简单工厂模式又称静态工厂方法模式。它存在的目的很简单:定义一个用于创建对象的接口。

    在简单工厂模式中,一个工厂类处于对产品类实例化调用的中心位置上,它决定那一个产品类应当被实例化。

    组成部分:

     1) 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java中它往往由一个具体类实现。

     2) 抽象产品角色:它一般是具体产品继承的父类或者实现的接口。在java中由接口或者抽象类来实现。

     3) 具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。

类图如下:

类图

举个小例子:

  
  
  
  
  1. package com.demo.test; 
  2.  
  3. //抽象产品角色 
  4. interface Cat{ 
  5.     public void eat(); 
  6.  
  7. //具体产品角色 
  8. class WhiteCat implements Cat{ 
  9.  
  10.     @Override 
  11.     public void eat() { 
  12.         // TODO Auto-generated method stub 
  13.         System.out.println("今天白猫吃鱼"); 
  14.     } 
  15.      
  16.  
  17. //具体产品角色 
  18. class BlackCat implements Cat{ 
  19.  
  20.     @Override 
  21.     public void eat() { 
  22.         // TODO Auto-generated method stub 
  23.         System.out.println("今天黑猫吃鱼"); 
  24.     } 
  25.      
  26.  
  27. //工厂类角色 
  28. class Host{ 
  29.     public static Cat feed(String s){ 
  30.         if ("WhiteCat".equalsIgnoreCase(s)) { 
  31.             return new WhiteCat(); 
  32.         } 
  33.         else if("BlackCat".equalsIgnoreCase(s)) 
  34.         { 
  35.             return new BlackCat(); 
  36.         } 
  37.         else 
  38.         { 
  39.             return new BlackCat(); 
  40.         } 
  41.     } 
  42. public class SimpleFactory { 
  43.     public static void main(String[] args) { 
  44.         // 主人说今天白猫吃鱼 
  45.         Cat cat = Host.feed("WhiteCat"); 
  46.         cat.eat(); 
  47.     } 

结果如下:

 

今天白猫吃鱼

  从开闭原则上分析简单工厂模式,主人每养一只猫,只要符合抽象产品定制,只要让工厂类知道客户就可以使用了,对于产品部分来说,符合开闭原则,但是对于工厂类来说,每增加一只猫,工厂类就要修改业务逻辑或判断逻辑,这违背开闭原则,对于新产品增加,工厂类很被动。

 

 

 

 

你可能感兴趣的:(java,简单工厂模式)