读书人

《有点模式》- 抽象工厂

发布时间: 2012-08-31 12:55:03 作者: rapoo

《有些模式》- 抽象工厂

?package com.macrotea.pattern.factory.abstr;import com.macrotea.pattern.factory.base.Food;import com.macrotea.pattern.factory.base.Vehicle;import com.macrotea.pattern.factory.base.Weapon;public abstract class AbstractFactory {public abstract Food createFood();public abstract Vehicle createVehicle();public abstract Weapon createWeapon();}

?

?

package com.macrotea.pattern.factory.ext;import com.macrotea.pattern.factory.abstr.AbstractFactory;import com.macrotea.pattern.factory.base.Food;import com.macrotea.pattern.factory.base.Vehicle;import com.macrotea.pattern.factory.base.Weapon;import com.macrotea.pattern.factory.sub.DongfengCar;import com.macrotea.pattern.factory.sub.LongjingTea;import com.macrotea.pattern.factory.sub.XiaolongPlane;public class ChinaFactory extends AbstractFactory{@Overridepublic Food createFood() {return new LongjingTea();}@Overridepublic Vehicle createVehicle() {return new DongfengCar();}@Overridepublic Weapon createWeapon() {return new XiaolongPlane();}}

?

?

?

package com.macrotea.pattern.factory.ext;import com.macrotea.pattern.factory.abstr.AbstractFactory;import com.macrotea.pattern.factory.base.Food;import com.macrotea.pattern.factory.base.Vehicle;import com.macrotea.pattern.factory.base.Weapon;import com.macrotea.pattern.factory.sub.Car;import com.macrotea.pattern.factory.sub.Gun;import com.macrotea.pattern.factory.sub.Nut;public class DefaultFactory extends AbstractFactory{@Overridepublic Food createFood() {return new Nut();}@Overridepublic Vehicle createVehicle() {return new Car();}@Overridepublic Weapon createWeapon() {return new Gun();}}

?

?

package com.macrotea.pattern.factory.base;public abstract class Food {public abstract void eat();}

?

?

package com.macrotea.pattern.factory.base;public abstract class Vehicle {public abstract void run();}

?

?

package com.macrotea.pattern.factory.base;public abstract class Weapon {public abstract void shoot();}

?

?

package com.macrotea.pattern.factory.sub;import com.macrotea.pattern.factory.base.Vehicle;public class Car extends Vehicle{@Overridepublic void run() {System.out.println("Car-run()");}}

?

?

package com.macrotea.pattern.factory.sub;import com.macrotea.pattern.factory.base.Vehicle;public class DongfengCar extends Vehicle {@Overridepublic void run() {System.out.println("东风牌货车开动...");}}

?

?

package com.macrotea.pattern.factory.sub;import com.macrotea.pattern.factory.base.Weapon;public class Gun extends Weapon{@Overridepublic void shoot() {System.out.println("Gun-shoot()");}}

?

?

package com.macrotea.pattern.factory.sub;import com.macrotea.pattern.factory.base.Food;public class LongjingTea extends Food {@Overridepublic void eat() {System.out.println("来杯龙井...");}}

?

?

package com.macrotea.pattern.factory.sub;import com.macrotea.pattern.factory.base.Food;public class Nut extends Food{@Overridepublic void eat() {System.out.println("Nut-eat()");}}

?

package com.macrotea.pattern.factory.sub;import com.macrotea.pattern.factory.base.Weapon;public class XiaolongPlane extends Weapon {@Overridepublic void shoot() {System.out.println("枭龙歼灭机射击...");}}

?

?

package com.macrotea.pattern.factory.test;import com.macrotea.pattern.factory.abstr.AbstractFactory;import com.macrotea.pattern.factory.base.Food;import com.macrotea.pattern.factory.base.Vehicle;import com.macrotea.pattern.factory.base.Weapon;import com.macrotea.pattern.factory.ext.DefaultFactory;public class Mainer {public static void main(String[] args) {/*默认工厂*/AbstractFactory defFactory=new DefaultFactory();//食物Food food=defFactory.createFood();food.eat();//交通工具Vehicle vehicle=defFactory.createVehicle();vehicle.run();//武器Weapon weapon=defFactory.createWeapon();weapon.shoot();/*中国工厂AbstractFactory cnFactory=new ChinaFactory();//食物Food food=cnFactory.createFood();food.eat();//交通工具Vehicle vehicle=cnFactory.createVehicle();vehicle.run();//武器Weapon weapon=cnFactory.createWeapon();weapon.shoot();*/}}

?

?

?

抽象工厂方便控制产品系列

普通工厂方便控制产品种类

读书人网 >软件架构设计

热点推荐