2008-03-19
设计模式学习----工厂方法2
工厂方法是用的最多的设计模式,所以今天再深入的学习。
package com.factorydemo.www;
public class Factory {
public static void main(String[] args){
/*Car car = null;
CarFactory c = new CarFactory();
car = c.getCarInstance("Benz");
if(c!=null)
{
car.run();
car.stop();
}
else
{
System.out.println("不能生成你想生成你想要的!");
}*/
Car car = null;
BusFactory c = new BusFactory();
car =c.getBus("BigBus");
if(c!=null){
car.run();
car.stop();
}
else{
System.out.println("sorry!");
}
}
}
interface Car {
public void run();
public void stop();
}
class Benz implements Car{
public void run(){
System.out.println("Benz is runing............");
}
public void stop(){
System.out.println("Benz is stop!");
}
}
class Ford implements Car{
public void run(){
System.out.println("Ford is runing ........");
}
public void stop(){
System.out.println("Ford is stop!");
}
}
class BigBus implements Car{
public void run(){
System.out.println("BigBus is runing .......");
}
public void stop(){
System.out.println("BigBus is stop1");
}
}
class MiniBus implements Car{
public void run(){
System.out.println("MiniBus is running .....");
}
public void stop(){
System.out.println("MiniBus is stop!");
}
}
interface GetFactory{
}
class CarFactory implements GetFactory{
Car c = null;
public Car getCarInstance(String type){
try {
c = (Car)Class.forName("com.factorydemo.www."+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();
}//使用了java的反射机制,forName("包名."+type).newInstance生成实例,(car)转换。
return c;
}
}
class BusFactory implements GetFactory{
Car c = null;
public Car getBus(String type){
try {
c =(Car)Class.forName("com.factorydemo.www."+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;
}
}







评论排行榜