您的位置:首页 > 其它

由歌词引发的模式思考之中篇(AbstractFactory模式)

2013-04-14 22:22 375 查看
 上篇的FactoryMethod阐述的是生产不同的交通工具的工厂,要么让老张单独的开车去,要么让他单独的开飞机去,但是呢,这样老张不是很孤独寂寞去东北吗?一点娱乐的气息都木有,OK,现在我们酝酿一个这样的场景,让老张开着车,叼着苹果,扛着AK47去东北,这样老张就不无聊了,车、苹果、AK47,这是一个系列的产品,而AbstractFactory就是解决系列产品生产问题。

二、AbstractFactory

AbstractFactory模式

除了生产正常世界的系列产品,我们还可以生产魔法世界的系列产品(扫帚、魔法棒等),其实我们用的QQ或者酷我音乐盒等所用的皮肤更换功能,都是AbstractFactory模式的体现。

public abstract class Vehicle {
public abstract void run();
}


public abstract class Weapon {
public abstract void shoot();
}


public abstract class Food {
public abstract void printName();
}


public class Car extends Vehicle{
public void run() {
System.out.println("car run");
}
}


public class AK47 extends Weapon{
public void shoot() {
System.out.println("AK47 shoot");
}
}


public class Apple extends Food{
public void printName() {
System.out.println("apple");
}
}


public abstract class AbstractFactory {
public abstract Vehicle createVehicle();
public abstract Weapon createWeapon();
public abstract Food createFood();
}


public class DefaultFactory extends AbstractFactory{

@Override
public Car 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 class Bloom extends Vehicle {

@Override
public void run() {
System.out.println("bloom run");
}

}


public class MagicStick extends Weapon {

@Override
public void shoot() {
System.out.println("magicstick shoot");
}

}


public class Muslrom extends Food {

@Override
public void printName() {
System.out.println("muslrom");
}

}


public class MagicFactory extends AbstractFactory{

@Override
public Vehicle createVehicle() {
// TODO Auto-generated method stub
return new Bloom();
}

@Override
public Weapon createWeapon() {
// TODO Auto-generated method stub
return new MagicStick();
}

@Override
public Food createFood() {
// TODO Auto-generated method stub
return new Muslrom();
}

}


public class Test {

/**
* @param args
*/
public static void main(String[] args) {
AbstractFactory d = new DefaultFactory();
//        AbstractFactory d = new MagicFactory();
Vehicle c = d.createVehicle();
c.run();
Weapon ak = d.createWeapon();
ak.shoot();
Food a = d.createFood();
a.printName();
}

}


这样,我们只需要改变工厂就可改变一系列的产品。

AbstractFactory类结构

由图可知,DefaultFactory和MagicFactory都实现AbstractFactory,DefaultFactory生产Car、AK47、Apple这一系列产品,而MagicFactory生产Broom、MagicStick、Muslroom。



关注下篇。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: