工厂模式:不修改工厂,只增删类对应修改配置文件就OK啦!

[color=olive]
[size=large]
我们的最终目的是:不修改工厂,只需添加新的类和配置文件就能实现工厂生产该子类对象。这种开发思路在我们的开发过程中是随处可见的,比如在:Spring , Hibernate,Struts中应用得相当的普遍,理解了这一点对我们学习SSH那是非常的顺手哦!

当然具体的用法需要在实际的项目中来体验和优化!

更详细的介绍请看本Page下载文件:CarFactory_code.rar
[/size]
[/color]

package com.cdl.dp.factory2;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.InvalidPropertiesFormatException;
import java.util.Properties;
import java.util.Scanner;

//参考:http://www.blogjava.net/jzgl-ever/archive/2008/07/26/217704.html
//参考:interfaceAndFactory.CarFactory
//参考:package com.cdl.dp.factory;
interface Car {
public void run();

public void stop();
}

class Benz implements Car {
public void run() {
System.out.println("Benz开始启动了。。。。。");
}

public void stop() {
System.out.println("Benz停车了。。。。。");
}
}

class Ford implements Car {
public void run() {
System.out.println("Ford开始启动了。。。");
}

public void stop() {
System.out.println("Ford停车了。。。。");
}
}

class Toyota implements Car {
public void run() {
System.out.println("Toyota开始启动了。。。");
}

public void stop() {
System.out.println("Toyota停车了。。。。");
}
}

// 扩展一个我自己的品牌,O(∩_∩)O哈哈~
class Cdliang implements Car {
public void run() {
System.out.println("Cdliang开始启动了。。。");
}

public void stop() {
System.out.println("Cdliang停车了。。。。");
}
}

class BYD implements Car {
public void run() {
System.out.println("BYD开始启动了。。。");
}

public void stop() {
System.out.println("BYD停车了。。。。");
}
}

class ProduceCar {//通过carClassPath反射,生成一个car实例
public static Car getCarInstance(String carClassPath) {
Car c = null;
try {
c = (Car) Class.forName(carClassPath).newInstance();
// 利用反射得到汽车类型,path.package.ClassName当然我们要捕获异常啦
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return c;
}
}

// 写一个加载XML文件的类,加载后就好供我们的程序使用了噻
class InitProperties {
public static Properties getProperties() {// 静态的方法可以让我们不实例化就直接调用
Properties pro = new Properties();
try {
pro.loadFromXML(new FileInputStream("cdl2.xml"));
} catch (InvalidPropertiesFormatException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(pro);
return pro;
}
}

public class CarFactory {

public static void main(String[] args) {

Properties pro = new Properties();
pro = InitProperties.getProperties();

System.out.println("请输入你要的车品牌:");
Scanner sc = new Scanner(System.in);
String carName = sc.nextLine().trim();

Car c = ProduceCar.getCarInstance((String) pro.get(carName));
if (c != null) {// 如果这类存在那么就调用它的方法
c.run();
c.stop();
} else {
System.out.println("造不了这种汽车。。。");
}
}

}

运行结果:
{Benz=com.cdl.dp.factory2.Benz, Ford=com.cdl.dp.factory2.Ford, BYD=com.cdl.dp.factory2.BYD, Toyota=com.cdl.dp.factory2.Toyota, Cdliang=com.cdl.dp.factory2.Cdliang}
请输入你要的车品牌:
BYD
BYD开始启动了。。。
BYD停车了。。。。




.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值