功能:
简单工厂模式又称静态工厂模式,用来实例化目标类的静态类。
实例:
a、说明:
b、代码1
*******************************************************
package designPatterns.factorydemo.simplefactory;
//车类型
interface Car{
public void run();;
public void stop();;
}
//第一种车
class Benz implements Car{
public void run(){
System.out.println("奔驰开动了!");
}
public void stop(){
System.out.println("奔驰停了!");
}
}
//第二种车
class Ford implements Car{
public void run(){
System.out.println("伏特开动了!");
}
public void stop(){
System.out.println("伏特停了!");
}
}
//加一个工厂类,为客户端实例化一个对象
class Factory{
//
public static Car getCarInstance(){
//return new Benz();
//实例化伏特
return new Ford();
}
}
public class SimpleFactorydemo {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
/**
* 没有使用工厂模式时,即没有添加工厂类Factory时*/
//错误的
//Benz benz = new Benz();
//benz.run();
//调用奔驰
//Car benz = new Benz();
//benz.run();
////调用伏特
//Car ford = new Ford();
//ford.run();
//
/**
* 添加了Factory类后*/
Car benz = Factory.getCarInstance();
benz.run();
benz.stop();
//客户端不能选择
}
}
********************************************************
c、代码2:
如果用户希望工厂能创造用户想要的汽车,输入参数在工厂中没有
*******************************************************
package designPatterns.factorydemo2;
//车类型
interface Car{
public void run();;
public void stop();;
}
//第一种车
class Benz implements Car{
public void run(){
System.out.println("奔驰开动了!");
}
public void stop(){
System.out.println("奔驰停了!");
}
}
//第二种车
class Ford implements Car{
public void run(){
System.out.println("伏特开动了!");
}
public void stop(){
System.out.println("伏特停了!");
}
}
//加一个工厂类,为客户端实例化一个对象
class Factory{
//
public static Car getCarInstance(String type){
//return new Benz();
//实例化伏特
//return new Ford();
Car c=null;
if(type.endsWith("Benz"))
c= new Benz();
else if(type.endsWith("Ford"))
c= new Ford();
return c;
}
}
public class SimpleFactorydemo2 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Car benz = Factory.getCarInstance("Benz");
benz.run();
benz.stop();
Car ford = Factory.getCarInstance("Ford");
ford.run();
ford.stop();
//如果创建一个自己的车,则要判断工厂里面是否有
Car me = Factory.getCarInstance("adfjakljf");
if(me!=null)
{
me.run();
me.stop();
}
else{
System.out.println("造不了这种类型的车");
}
}
}
*******************************************************
e、代码3:利用java的反射机制来 解决扩充子类不去修改工厂
********************************************************
package designPatterns.factorydemo3;
//车类型
interface Car{
public void run();;
public void stop();;
}
//第一种车
class Benz implements Car{
public void run(){
System.out.println("奔驰开动了!");
}
public void stop(){
System.out.println("奔驰停了!");
}
}
//第二种车
class Ford implements Car{
public void run(){
System.out.println("伏特开动了!");
}
public void stop(){
System.out.println("伏特停了!");
}
}
//扩充的车
class Toyoto implements Car{
public void run(){
System.out.println("丰田开动了!");
}
public void stop(){
System.out.println("丰田停了!");
}
}
//加一个工厂类,为客户端实例化一个对象
class Factory{
//
public static Car getCarInstance(String type){
//return new Benz();
//实例化伏特
//return new Ford();
//Car c=null;
//if(type.endsWith("Benz"))
//c= new Benz();
//else if(type.endsWith("Ford"))
//c= new Ford();
//return c;
Car c=null;
try {
c = (Car)Class.forName("designPatterns.factorydemo3."+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;
}
}
public class SimpleFatorydemo3 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//如果创建一个自己的车,则要判断工厂里面是否有
Car me = Factory.getCarInstance("Toyoto");
if(me!=null)
{
me.run();
me.stop();
}
else{
System.out.println("造不了这种类型的车");
}
}
}
*******************************************************
2008

被折叠的 条评论
为什么被折叠?



