工廠方法模式
工廠方法模式
工廠方法模式和簡單工廠模式在結(jié)構(gòu)上的不同是很明顯的。工廠方法模式的核心是一個抽象工廠類,而簡單工廠模式把
核心放在一個具體類上。工廠方法模式可以允許很多具體工廠類從抽象工廠類中將創(chuàng)建行為繼承下來,從而可以成為多個簡單工廠模式的綜合,進而推廣了簡單工廠模式。
此模式涉及到抽象工廠角色(汽車廠),具體工廠角色(具體的汽車車間),抽象產(chǎn)品角色(汽車)以及具體產(chǎn)品角色(私車,公交巴士)。
package com.strongit.factory;
//抽象汽車
interface Car{
public void run();
public void stop();
}
//奔馳汽車
class Benz implements Car{
public void run() {
System.out.println("BMW run
");
}
public void stop() {
System.out.println("BMW stop
");
}
}
//福特汽車
class Ford implements Car{
public void run() {
System.out.println("Ford run
");
}
public void stop() {
System.out.println("Ford stop
");
}
}
//公交巴士
class Bus implements Car{
public void run() {
System.out.println("Bus run
");
}
public void stop() {
// TODO Auto-generated method stub
System.out.println("Bus stop
");
}
}
//迷你巴士
class MinBus implements Car{
public void run() {
System.out.println("MinBus run
");
}
public void stop() {
System.out.println("MinBus stop
");
}
}
//抽象工廠
interface Abstractfactory{
}
//汽車工廠
class CarFactory implements Abstractfactory{
public Car getCar(String type){
Car c=null;
try {
c=(Car)Class.forName("com.strongit.factory."+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 c;
}
}
//巴士工廠
class BusFactory implements Abstractfactory{
public Car getBus(String type){
Car c=null;
try {
//java反射機制
c=(Car)Class.forName("com.strongit.factory."+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 c;
}
}
//客服端調(diào)用
public class FactoryDemo {
public static void main(String[] args) {
//CarFactory cf=new CarFactory();
BusFactory bf=new BusFactory();
Car c=null;
//c=cf.getCar("Benz");
c=bf.getBus("MinBus");
c.run();
c.stop();
}
}
/** 運行結(jié)果:
MinBus run
MinBus stop
*/
//抽象汽車
interface Car{
public void run();
public void stop();
}
//奔馳汽車
class Benz implements Car{
public void run() {
System.out.println("BMW run

}
public void stop() {
System.out.println("BMW stop

}
}
//福特汽車
class Ford implements Car{
public void run() {
System.out.println("Ford run

}
public void stop() {
System.out.println("Ford stop

}
}
//公交巴士
class Bus implements Car{
public void run() {
System.out.println("Bus run

}
public void stop() {
// TODO Auto-generated method stub
System.out.println("Bus stop

}
}
//迷你巴士
class MinBus implements Car{
public void run() {
System.out.println("MinBus run

}
public void stop() {
System.out.println("MinBus stop

}
}
//抽象工廠
interface Abstractfactory{
}
//汽車工廠
class CarFactory implements Abstractfactory{
public Car getCar(String type){
Car c=null;
try {
c=(Car)Class.forName("com.strongit.factory."+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 c;
}
}
//巴士工廠
class BusFactory implements Abstractfactory{
public Car getBus(String type){
Car c=null;
try {
//java反射機制
c=(Car)Class.forName("com.strongit.factory."+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 c;
}
}
//客服端調(diào)用
public class FactoryDemo {
public static void main(String[] args) {
//CarFactory cf=new CarFactory();
BusFactory bf=new BusFactory();
Car c=null;
//c=cf.getCar("Benz");
c=bf.getBus("MinBus");
c.run();
c.stop();
}
}
/** 運行結(jié)果:
MinBus run

MinBus stop

*/
posted on 2008-10-31 18:23 lanjh 閱讀(264) 評論(0) 編輯 收藏 所屬分類: 設(shè)計模式