Blog信息 |
blog名称: 日志总数:1304 评论数量:2242 留言数量:5 访问次数:7577602 建立时间:2006年5月29日 |

| |
[codehaus.org]『蚂蚁学模式』之实例化抽象工厂模式及碎言 软件技术
lhwork 发表于 2007/1/10 9:33:37 |
延续『蚂蚁学模式』之实例化简单工厂、工厂方法模式中工厂方法模式的实例。而这次,汽车厂(MotorFactory)有新的需求,不只要生产国产车(NativeMotor),还需要生产进口车(ForeignMotor)。这两种车都包括公交(Bus)和小轿车(Car)。1. com.cleversoft.designpatterns.abstractfactory.MotorFactory.java
500)this.width=500'> package com.cleversoft.designpatterns.abstractfactory;500)this.width=500'>500)this.width=500'>500)this.width=500'> public interface MotorFactory 500)this.width=500'> {500)this.width=500'>500)this.width=500'>} 2. com.cleversoft.designpatterns.abstractfactory.NativeMotor.java
500)this.width=500'>package com.cleversoft.designpatterns.abstractfactory;500)this.width=500'>500)this.width=500'>500)this.width=500'>public class NativeMotor implements MotorFactory 500)this.width=500'>{500)this.width=500'>500)this.width=500'> public Car produceCar() 500)this.width=500'>{500)this.width=500'> return new NativeCar();500)this.width=500'> }500)this.width=500'>500)this.width=500'>500)this.width=500'> public Bus produceBus() 500)this.width=500'>{500)this.width=500'> return new NativeBus();500)this.width=500'> }500)this.width=500'>}3. com.cleversoft.designpatterns.abstractfactory.ForeignMotor.java
500)this.width=500'>package com.cleversoft.designpatterns.abstractfactory;500)this.width=500'>500)this.width=500'>500)this.width=500'>public class ForeignMotor implements MotorFactory 500)this.width=500'>{500)this.width=500'>500)this.width=500'> public Car produceCar() 500)this.width=500'>{500)this.width=500'> return new ForeignCar();500)this.width=500'> }500)this.width=500'>500)this.width=500'>500)this.width=500'> public Bus produceBus() 500)this.width=500'>{500)this.width=500'> return new ForeignBus();500)this.width=500'> }500)this.width=500'>}4. com.cleversoft.designpatterns.abstractfactory.Bus.java
500)this.width=500'>package com.cleversoft.designpatterns.abstractfactory;500)this.width=500'>500)this.width=500'>500)this.width=500'>public interface Bus 500)this.width=500'>{500)this.width=500'> public void run();500)this.width=500'>}5. com.cleversoft.designpatterns.abstractfactory.Car.java
500)this.width=500'>package com.cleversoft.designpatterns.abstractfactory;500)this.width=500'>500)this.width=500'>500)this.width=500'>public interface Car 500)this.width=500'>{500)this.width=500'> public void run();500)this.width=500'>}6. com.cleversoft.designpatterns.abstractfactory.ForeignBus.java
500)this.width=500'>package com.cleversoft.designpatterns.abstractfactory;500)this.width=500'>500)this.width=500'>500)this.width=500'>public class ForeignBus implements Bus 500)this.width=500'>{500)this.width=500'>500)this.width=500'>500)this.width=500'> public ForeignBus() 500)this.width=500'>{500)this.width=500'>500)this.width=500'> }500)this.width=500'>500)this.width=500'>500)this.width=500'> public void run() 500)this.width=500'>{500)this.width=500'> System.out.println("This is a foreign bus!");500)this.width=500'> }500)this.width=500'>}7. com.cleversoft.designpatterns.abstractfactory.ForeignCar.java
500)this.width=500'>package com.cleversoft.designpatterns.abstractfactory;500)this.width=500'>500)this.width=500'>500)this.width=500'>public class ForeignCar implements Car 500)this.width=500'>{500)this.width=500'>500)this.width=500'>500)this.width=500'> public ForeignCar() 500)this.width=500'>{500)this.width=500'>500)this.width=500'> }500)this.width=500'>500)this.width=500'>500)this.width=500'> public void run() 500)this.width=500'>{500)this.width=500'> System.out.println("This is a foreign car!");500)this.width=500'> }500)this.width=500'>}8. com.cleversoft.designpatterns.abstractfactory.NativeBus.java
500)this.width=500'>package com.cleversoft.designpatterns.abstractfactory;500)this.width=500'>500)this.width=500'>500)this.width=500'>public class NativeBus implements Bus 500)this.width=500'>{500)this.width=500'>500)this.width=500'>500)this.width=500'> public NativeBus() 500)this.width=500'>{500)this.width=500'>500)this.width=500'> }500)this.width=500'>500)this.width=500'>500)this.width=500'> public void run() 500)this.width=500'>{500)this.width=500'> System.out.println("This is a native bus!");500)this.width=500'> }500)this.width=500'>}9. com.cleversoft.designpatterns.abstractfactory.NativeCar.java
500)this.width=500'>package com.cleversoft.designpatterns.abstractfactory;500)this.width=500'>500)this.width=500'>500)this.width=500'>public class NativeCar implements Car 500)this.width=500'>{500)this.width=500'>500)this.width=500'> public NativeCar() 500)this.width=500'>{500)this.width=500'>500)this.width=500'> }500)this.width=500'>500)this.width=500'>500)this.width=500'> public void run() 500)this.width=500'>{500)this.width=500'> System.out.println("This is a native car!");500)this.width=500'> }500)this.width=500'>}10. com.cleversoft.designpatterns.abstractfactory.Main.java
500)this.width=500'>package com.cleversoft.designpatterns.abstractfactory;500)this.width=500'>500)this.width=500'>500)this.width=500'>public class Main 500)this.width=500'>{500)this.width=500'>500)this.width=500'>500)this.width=500'> /** *//**500)this.width=500'> * @param args500)this.width=500'> */500)this.width=500'>500)this.width=500'> public static void main(String[] args) 500)this.width=500'>{500)this.width=500'> // TODO Auto-generated method stub500)this.width=500'> Bus b = new ForeignMotor().produceBus();500)this.width=500'> b.run();500)this.width=500'> Car c = new NativeMotor().produceCar();500)this.width=500'> c.run();500)this.width=500'> }500)this.width=500'>500)this.width=500'>}
终于开始想通一些问题,500)this.width=500'>。也再次印证这样的道理:没有笨的读者,只有笨的作者。从分析的角度,你要做的无非是些抽象的活儿;从普通编程人员的角度,你要实现的是类似NativeBus.java的具体实现。这是差距,巨大的差距!会写实例以外的一些东西。参考资料:1. http://terrylee.cnblogs.com/archive/2005/12/13/295965.html2. 《Java与模式》 |
|
|