package org.xiaolai.factorydemo01;
interface Car{
public void run();
public void stop();
}
class Ford implements Car{
public void run() {
System.out.println("Ford开始启动了。。。");
}
public void stop() {
// TODO Auto-generated method stub
System.out.println("Ford停止了。。。。");
}
}
class Benz implements Car{
public void run() {
System.out.println("Benz开始启动了。。。");
}
public void stop() {
System.out.println("Benz停止了。。。。");
}
}
class Factory{
public static Car getFactoryInstance(){
return new Benz();
}
}
public class FactoryDemo01 {
public static void main(String[] args) {
/* Car c=new Benz();弊端:接口与子类的藕合性强。解决办法:用工厂类管理
c.run();
c.stop();
*/
Car c=Factory.getFactoryInstance();//存在的问题是实例化不同的类要改动工厂类,
//解决办法见FactoryDemo02
c.run();
c.stop();
}
}
package org.xiaolai.factorydemo02;
interface Car{
public void run();
public void stop();
}
class Ford implements Car{
public void run() {
System.out.println("Ford开始启动了。。。");
}
public void stop() {
// TODO Auto-generated method stub
System.out.println("Ford停止了。。。。");
}
}
class Benz implements Car{
public void run() {
System.out.println("Benz开始启动了。。。");
}
public void stop() {
System.out.println("Benz停止了。。。。");
}
}
class Factory{
public static Car getFactoryInstance(String type){
Car c=null;
if("Ford".equals(type)){
c=new Ford();
}
if("Benz".equals(type)){
c=new Benz();
}
return c;
}
}
public class FactoryDemo02 {
public static void main(String[] args) {
Car c=Factory.getFactoryInstance("dd");
//用if语句块解决没有对应匹配的字符串。
if(c!=null){
c.run();
c.stop();
}else{
System.out.println("Sorry,本工厂暂时不生产这种类型汽车!");
}
//但还存在实际问题:如要扩大规模,就得重新添加修改工厂类,如添加if模块
//解决办法,请看factorydemo03---->利用java的反射机制。
}
}
package org.xiaolai.factorydemo03;
interface Car{
public void run();
public void stop();
}
class Ford implements Car{
public void run() {
System.out.println("Ford开始启动了。。。");
}
public void stop() {
// TODO Auto-generated method stub
System.out.println("Ford停止了。。。。");
}
}
class Benz implements Car{
public void run() {
System.out.println("Benz开始启动了。。。");
}
public void stop() {
System.out.println("Benz停止了。。。。");
}
}
class Toyota implements Car{
public void run() {
System.out.println("Toyota开始启动了。。。");
}
public void stop() {
System.out.println("Toyota停止了。。。。");
}
}
class Factory{
public static Car getFactoryInstance(String type){
Car c=null;
try {
c=(Car)Class.forName("org.xiaolai.factorydemo03."+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 FactoryDemo03 {
public static void main(String[] args) {
Car c=Factory.getFactoryInstance("Toyota");
//用if语句块解决没有对应匹配的字符串。
if(c!=null){
c.run();
c.stop();
}else{
System.out.println("Sorry,本工厂暂时不生产这种类型汽车!");
}
//解决办法,请看factorydemo03---->利用java的反射机制。
}
}