/**
*
*/
package com.youyj.methodfactory;
/**
* 抽象產品(Product)角色:工廠方法模式所創建的對象的超類型,也就是產品對象的共同父類或共同擁有的接口
* @author Administrator
*
*/
interface Moblie
{
public void call();
}
/**
* 具體產品(Concrete Product)角色:這個角色實現了抽象產品角色所定義的接口。某具體產品有專門的具體工廠創建,它們之間往往一一對應
* @author Administrator
*
*/
class Motorola implements Moblie
{
@Override
public void call()
{
System.out.println("Motorola Producted");
}
}
/**
* 具體產品(Concrete Product)角色:這個角色實現了抽象產品角色所定義的接口。某具體產品有專門的具體工廠創建,它們之間往往一一對應
* @author Administrator
*
*/
class Nokia implements Moblie
{
@Override
public void call()
{
System.out.println("Nokia Producted");
}
}
/**
* 抽象工廠(Creator)角色:是工廠方法模式的核心,與應用程序無關。任何在模式中創建的對象的工廠類必須實現這個接口
* @author Administrator
*
*/
interface MoblileFactory
{
public Moblie produceMobile(String type);
}
/**
* 具體工廠(Concrete Creator)角色:這是實現抽象工廠接口的具體工廠類,包含與應用程序密切相關的邏輯,並且受到應用程序調用以創建產品對象
* @author Administrator
*
*/
class MotorolaFactory implements MoblileFactory
{
public Moblie produceMobile(String type)
{
Moblie moble = null;
try
{
moble = (Moblie) Class.forName("com.youyj.methodfactory." + type)
.newInstance();
}
catch (InstantiationException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IllegalAccessException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (ClassNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return moble;
}
}
/**
* 具體工廠(Concrete Creator)角色:這是實現抽象工廠接口的具體工廠類,包含與應用程序密切相關的邏輯,並且受到應用程序調用以創建產品對象
* @author Administrator
*
*/
class NokiaFactory implements MoblileFactory
{
public Moblie produceMobile(String type)
{
Moblie moble = null;
try
{
moble = (Moblie) Class.forName("com.youyj.methodfactory." + type)
.newInstance();
}
catch (InstantiationException e)
{
e.printStackTrace();
}
catch (IllegalAccessException e)
{
e.printStackTrace();
}
catch (ClassNotFoundException e)
{
e.printStackTrace();
}
return moble;
}
}
public class MethodFactoryDemo
{
public static void main(String[] argv)
{
MoblileFactory mf = new MotorolaFactory();
Moblie mb = mf.produceMobile("Motorola");
mb.call();
mf = new NokiaFactory();
mb = mf.produceMobile("Nokia");
mb.call();
}
}