有时候我们见到换皮肤,切换系列产品(族),是不是所有代码重新来过一遍呢,不是的,这时候抽象工厂/系列工厂模式应运而用.抽象工厂的基本脉络就是继承于父级产品类的多个抽象产品类的具体实现。
以下是实现:
/**
* 工厂的父类-抽象工厂-产生系列产品的方法
* @author Rick
*
*/
public abstract class AbstractFactory {
public abstract Vechicle createVehicle();
public abstract Weapon createWeapon();
public abstract Food createFood();
}
-------------------------------------------------------------------------------------------------------------------------
public class AK47 extends Weapon {
public void shoot() {
System.out.println("пепепе...");
}
}
-------------------------------------------------------------------------------------------------------------------------
public class Apple extends Food {
public void printName() {
System.out.println("apple");
}
}
-------------------------------------------------------------------------------------------------------------------------
public class Broom extends Vechicle {
public void run() {
System.out.println("һ·ɳӾѩ؉Ѽ4broom...");
}
}
----------------------------------------------------------------------------------------------------------------------
/**
* Singleģʽ
* @author Administrator
*
*/
public class Car extends Vechicle {
public void run() {
System.out.println("ðҌѼƜאcar...");
}
}
-------------------------------------------------------------------------------------------------------------------------
public class DefaultFactory extends AbstractFactory {
@Override
public Vechicle createVehicle() {
// TODO Auto-generated method stub
return new Car();
}
@Override
public Weapon createWeapon() {
// TODO Auto-generated method stub
return new AK47();
}
@Override
public Food createFood() {
// TODO Auto-generated method stub
return new Apple();
}
}
--------------------------------------------------------------------------------------
public abstract class Food {
public abstract void printName();
}
--------------------------------------------------------------------------------------
public class MagicFactory extends AbstractFactory {
public Broom createBroom() {
return new Broom();
}
public MagicStick createMagicStick() {
return new MagicStick();
}
public MushRoom createMushRoom() {
return new MushRoom();
}
@Override
public Vechicle createVehicle() {
return new Broom();
}
@Override
public Weapon createWeapon() {
return new MagicStick();
}
@Override
public Food createFood() {
return new MushRoom();
}
}
----------------------------------------------------------------------------------------------------------------------------------
public class MagicStick extends Weapon {
@Override
public void shoot() {
System.out.println("Fire hu hu hu ...");
}
}
----------------------------------------------------------------------------------------------------------------------------------
public interface Moveable {
void run();
}
-----------------------------------------------------------------------------------------------------------------------------------
public class MushRoom extends Food {
@Override
public void printName() {
System.out.println("mushroom...");
}
}
-----------------------------------------------------------------------------------------------------------------------------------
/**
* 系列产品
* @author Rick
*
*/
public class Test {
public static void main(String[] args) {
// DefaultFactory f = new DefaultFactory();
AbstractFactory f = new MagicFactory();
Vechicle v = f.createVehicle();
v.run();
Weapon w = f.createWeapon();
w.shoot();
Food a = f.createFood();
a.printName();
}
}
----------------------------------------------------------------------------------------------------------------------
public abstract class Vechicle {
public abstract void run();
}
----------------------------------------------------------------------------------------------------------------------
public abstract class Weapon {
public abstract void shoot();
}
起航!TAMAO!