《有些模式》- 抽象工厂
?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();*/}}?
?
?
抽象工厂方便控制产品系列
普通工厂方便控制产品种类