当前位置:编程学习 > JAVA >>

工厂模式(简单工厂,工厂方法,抽象工厂)

1.简单工厂模式:
     简单工厂模式又称静态工厂方法模式。从命名上就可以看出这个模式一定很简单。它存
在的目的很简单:定义一个用于创建对象的接口。
先来看看它的组成:


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

一个具体类实现。

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

象类来实现。

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


[java]
//抽象产品角色  
public inte易做图ce Fruit 

    public void get(); 

//具体产品角色  
public class Apple implements Fruit 

    public void get() 
    { 
        System.out.println("采摘苹果"); 
    } 

public class Banana implements Fruit 

    public  void get() 
    { 
        System.out.println("采摘香蕉"); 
    } 

//抽象产品角色
public inte易做图ce Fruit
{
 public void get();
}
//具体产品角色
public class Apple implements Fruit
{
 public void get()
 {
  System.out.println("采摘苹果");
 }
}
public class Banana implements Fruit
{
 public  void get()
 {
  System.out.println("采摘香蕉");
 }
}[java]
//工厂类角色  
public class FruitFactory 

    public static Fruit getFruit(String type) throws InstantiationException, IllegalAccessException 
    {//工厂方法.注意返回类型为抽象产品角色  
//      if(type.equalsIgnoreCase("apple"))  
//      {  
//              return Apple.class.newInstance();     
//      }  
//      else if(type.equalsIgnoreCase("banana"))  
//      {  
//              return Banana.class.newInstance();  
//      }  
        try 
        { 
            Class fruit=Class.forName(type);//type需要类名的全路径  
            return (Fruit) fruit.newInstance(); 
        } catch (ClassNotFoundException e) 
        { 
            // TODO Auto-generated catch block  
            e.printStackTrace(); 
        } 
 
        System.out.println("找不到相应的实例化类"); 
        return null; 
    } 

//工厂类角色
public class FruitFactory
{
 public static Fruit getFruit(String type) throws InstantiationException, IllegalAccessException
 {//工厂方法.注意返回类型为抽象产品角色
//  if(type.equalsIgnoreCase("apple"))
//  {
//    return Apple.class.newInstance(); 
//  }
//  else if(type.equalsIgnoreCase("banana"))
//  {
//    return Banana.class.newInstance();
//  }
  try
  {
   Class fruit=Class.forName(type);//type需要类名的全路径
   return (Fruit) fruit.newInstance();
  } catch (ClassNotFoundException e)
  {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }

  System.out.println("找不到相应的实例化类");
  return null;
 }
}[java]
public class MainClass 

 
    /**
     * @param args
     * @throws IllegalAccessException 
     * @throws InstantiationException 
     */ 
    public static void main(String[] args) throws InstantiationException, IllegalAccessException 
    { 
        // TODO Auto-generated method stub  
        //简单工厂模式  
//      Fruit apple=FruitFactory.getFruit("apple");  
//      apple.get();  
//      Fruit banana=FruitFactory.getFruit("banana");  
//      banana.get();  
        Fruit apple=FruitFactory.getFruit("design.pattern.易做图factory.Apple");//注意是全路径  
        apple.get(); 
        Fruit banana=FruitFactory.getFruit("design.pattern.易做图factory.Banana"); 
        banana.get(); 
    } 
 

public class MainClass
{

 /**
  * @param args
  * @throws IllegalAccessException
  * @throws InstantiationException
  */
 public static void main(String[] args) throws InstantiationException, IllegalAccessException
 {
  // TODO Auto-generated method stub
  //简单工厂模式
//  Fruit apple=FruitFactory.getFruit("apple");
//  apple.get();
//  Fruit banana=FruitFactory.getFruit("banana");
//  banana.get();
  Fruit apple=FruitFactory.getFruit("design.pattern.易做图factory.Apple");//注意是全路径
  apple.get();
  Fruit banana=FruitFactory.getFruit("design.pattern.易做图factory.Banana");
  banana.get();
 }

}
2.工厂方法模式:

 工厂方法模式去掉了简单工厂模式中工厂方法的静态属性,使得它可以被子类继承。这
样在简单工厂模式里集中在工厂方法上的压力可以由工厂方法模式里不同的工厂子类来分
担。


1) 抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须


实现的接口或者必须继承的父类。在java 中它由抽象类或者接口来实现。


2) 具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体


产品的对象。


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


或者接口来实现。


4) 具体产品角色:具体工厂角色所创建的对象就是此角色的实例。在 java 中

补充:软件开发 , Java ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,