Java中的简单工厂模式
2016-01-15 15:38
447 查看
转自:http://www.blogjava.net/jzgl-ever/archive/2008/07/26/217704.html
实例1:
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
package org.jzkangta.factorydemo01;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
//定义接口
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
interface Car{
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
public void run();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
public void stop();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
//具体实现类
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
class Benz implements Car{
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void run(){
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
System.out.println("Benz开始启动了。。。。。");
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void stop(){
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
System.out.println("Benz停车了。。。。。");
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.blogjava.net/Images/Outlin<br/>4000<br/>ingIndicators/None.gif)
//具体实现类
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
class Ford implements Car{
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void run(){
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
System.out.println("Ford开始启动了。。。");
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void stop(){
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
System.out.println("Ford停车了。。。。");
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
//工厂
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
class Factory{
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public static Car getCarInstance(){
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return new Ford();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
public class FactoryDemo01 {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public static void main(String[] args) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
Car c=Factory.getCarInstance();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
c.run();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
c.stop();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
实例二:
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
package fac;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
//定义接口
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
interface Car{
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
public void run();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
public void stop();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
//具体实现类
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
class Benz implements Car{
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void run(){
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
System.out.println("Benz开始启动了。。。。。");
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void stop(){
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
System.out.println("Benz停车了。。。。。");
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
class Ford implements Car{
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void run(){
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
System.out.println("Ford开始启动了。。。");
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void stop(){
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
System.out.println("Ford停车了。。。。");
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
//工厂
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
class Factory{
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public static Car getCarInstance(String type){
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
Car c=null;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if("Benz".equals(type)){
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
c=new Benz();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if("Ford".equals(type)){
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
c=new Ford();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return c;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
public class FactoryDemo02 {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public static void main(String[] args) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
Car c=Factory.getCarInstance("Benz");
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(c!=null){
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
c.run();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
c.stop();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
}else{
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
System.out.println("造不了这种汽车。。。");
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
实例三:
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
interface Car{
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
public void run();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
public void stop();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
class Benz implements Car{
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void run(){
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
System.out.println("Benz开始启动了。。。。。");
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void stop(){
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
System.out.println("Benz停车了。。。。。");
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
class Ford implements Car{
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void run(){
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
System.out.println("Ford开始启动了。。。");
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void stop(){
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
System.out.println("Ford停车了。。。。");
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
class Toyota implements Car{
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void run(){
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
System.out.println("Toyota开始启动了。。。");
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void stop(){
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
System.out.println("Toyota停车了。。。。");
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
class Factory{
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public static Car getCarInstance(String type){
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
Car c=null;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
try {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
c=(Car)Class.forName("org.jzkangta.factorydemo03."+type).newInstance();//利用反射得到汽车类型
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
} catch (InstantiationException e) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
// TODO Auto-generated catch block
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
e.printStackTrace();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
} catch (IllegalAccessException e) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
// TODO Auto-generated catch block
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
e.printStackTrace();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
} catch (ClassNotFoundException e) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
// TODO Auto-generated catch block
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
e.printStackTrace();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return c;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
public class FactoryDemo03 {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public static void main(String[] args) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
Car c=Factory.getCarInstance("Toyota");
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(c!=null){
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
c.run();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
c.stop();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
}else{
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
System.out.println("造不了这种汽车。。。");
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
对比三个实例:
实例一,虽然实现了简单工厂,但每次只能得到一种汽车,如果我们想换一种,就得修改工厂,太不方便,而实例二则改变了这种情况,便得我们可以按照我们的需要更换汽车,但我们所更换的汽车必须是实现类中有的,如果我们想要增加一种汽车的时候,我们还是得更改工厂,通过改进,实例三利用反射机制,得到汽车类型,这样当我们需要增加一种新的汽车时,就无需要再修改工厂,而只需要增加要实现的类即可。也就是说要增加什么样的汽车直接增加这个汽车的类即可,而无需改变工厂。从而达到了工厂分离的效果。
实例1:
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
package org.jzkangta.factorydemo01;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
//定义接口
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
interface Car{
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
public void run();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
public void stop();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
//具体实现类
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
class Benz implements Car{
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void run(){
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
System.out.println("Benz开始启动了。。。。。");
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void stop(){
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
System.out.println("Benz停车了。。。。。");
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.blogjava.net/Images/Outlin<br/>4000<br/>ingIndicators/None.gif)
//具体实现类
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
class Ford implements Car{
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void run(){
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
System.out.println("Ford开始启动了。。。");
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void stop(){
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
System.out.println("Ford停车了。。。。");
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
//工厂
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
class Factory{
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public static Car getCarInstance(){
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return new Ford();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
public class FactoryDemo01 {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public static void main(String[] args) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
Car c=Factory.getCarInstance();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
c.run();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
c.stop();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
实例二:
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
package fac;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
//定义接口
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
interface Car{
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
public void run();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
public void stop();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
//具体实现类
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
class Benz implements Car{
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void run(){
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
System.out.println("Benz开始启动了。。。。。");
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void stop(){
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
System.out.println("Benz停车了。。。。。");
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
class Ford implements Car{
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void run(){
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
System.out.println("Ford开始启动了。。。");
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void stop(){
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
System.out.println("Ford停车了。。。。");
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
//工厂
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
class Factory{
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public static Car getCarInstance(String type){
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
Car c=null;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if("Benz".equals(type)){
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
c=new Benz();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if("Ford".equals(type)){
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
c=new Ford();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return c;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
public class FactoryDemo02 {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public static void main(String[] args) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
Car c=Factory.getCarInstance("Benz");
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(c!=null){
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
c.run();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
c.stop();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
}else{
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
System.out.println("造不了这种汽车。。。");
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
实例三:
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
interface Car{
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
public void run();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
public void stop();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
class Benz implements Car{
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void run(){
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
System.out.println("Benz开始启动了。。。。。");
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void stop(){
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
System.out.println("Benz停车了。。。。。");
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
class Ford implements Car{
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void run(){
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
System.out.println("Ford开始启动了。。。");
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void stop(){
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
System.out.println("Ford停车了。。。。");
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
class Toyota implements Car{
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void run(){
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
System.out.println("Toyota开始启动了。。。");
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void stop(){
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
System.out.println("Toyota停车了。。。。");
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
class Factory{
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public static Car getCarInstance(String type){
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
Car c=null;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
try {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
c=(Car)Class.forName("org.jzkangta.factorydemo03."+type).newInstance();//利用反射得到汽车类型
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
} catch (InstantiationException e) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
// TODO Auto-generated catch block
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
e.printStackTrace();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
} catch (IllegalAccessException e) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
// TODO Auto-generated catch block
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
e.printStackTrace();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
} catch (ClassNotFoundException e) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
// TODO Auto-generated catch block
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
e.printStackTrace();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return c;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
public class FactoryDemo03 {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public static void main(String[] args) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
Car c=Factory.getCarInstance("Toyota");
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(c!=null){
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
c.run();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
c.stop();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
}else{
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
System.out.println("造不了这种汽车。。。");
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
对比三个实例:
实例一,虽然实现了简单工厂,但每次只能得到一种汽车,如果我们想换一种,就得修改工厂,太不方便,而实例二则改变了这种情况,便得我们可以按照我们的需要更换汽车,但我们所更换的汽车必须是实现类中有的,如果我们想要增加一种汽车的时候,我们还是得更改工厂,通过改进,实例三利用反射机制,得到汽车类型,这样当我们需要增加一种新的汽车时,就无需要再修改工厂,而只需要增加要实现的类即可。也就是说要增加什么样的汽车直接增加这个汽车的类即可,而无需改变工厂。从而达到了工厂分离的效果。
相关文章推荐
- spring mvc打印信息
- java实现HDFS上的压缩文件的解压
- 深入浅出设计模式(七):9.代理模式
- java25:SimpleDateFormat;DateFormat
- Spring 2.0技术手册 -1
- Java toString 性能优化方案比较
- Spring3.0 核心jar包详解
- 学java心得体会
- The java ee tutorial 学习记录
- 无法debug断点跟踪JDK源代码——missing line number attributes的解决方法
- 存储过程与JAVA
- Java输入输出流(1)
- Java 中String的split函数简介
- JAVA汉字转拼音
- java中list的add与addall方法区别
- WebSocket集成XMPP网页即时通讯1:Java Web Project服务端/客户端Jetty9开发初探
- Java访问权限修饰符的区别
- java(12)--xml之dom4j方式的增删改查
- JAVA读写文件
- JAVA操作Excel