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

2014-11-24 10:36:27 · 作者: · 浏览: 0

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


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

一个具体类实现。

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

象类来实现。

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


[java]
//抽象产品角色
public interface 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 interface 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.simplefactory.Apple");//注意是全路径
apple.get();
Fruit banana=FruitFactory.getFruit("design.pattern.simplefactory.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.ge