其实使用abstract和interface只是根据你的需求来使用,在一些问题上并无太大的区别
简单的工厂在产生产品系列(武器,食品等)的时候会很麻烦,会导致工厂泛滥
抽象工厂在产生产品种类(枪,苹果等)的时候需要修改的地方会很多
public class Person {
public static void main(String[] args) {
AbstractFactory f1=new DefaultFactory();
Weapon w1=f1.createWeapon();
Transport t1=f1.createTransport();
t1.run();
w1.shot();
/**
* 我开着汽车
* 拿着AK47手枪
*/
//如果要修改的话只需要修改工厂的实现方法即可
AbstractFactory f=new MagicFactory();
Weapon w=f.createWeapon();
Transport t=f.createTransport();
t.run();
w.shot();
/**
* 我骑着扫帚..
* 拿着魔法棒
*/
}
}
//抽象工厂
public abstract class AbstractFactory {
public abstract Weapon createWeapon();//武器的简单工厂
public abstract Transport createTransport();//交通工具的简单工厂
}
public class DefaultFactory extends AbstractFactory{
@Override
public Transport createTransport() {
return new Car();
}
@Override
public Weapon createWeapon() {
return new AK47();
}
}
public class MagicFactory extends AbstractFactory{
@Override
public Transport createTransport() {
return new Broom();
}
@Override
public Weapon createWeapon() {
return new MagicStick();
}
}
//武器
public interface Weapon {
<SPAN style="WHITE-SPACE: pre"> </SPAN>void shot();
}
//交通工具
public interface Transport {
void run();
}
public class Car implements Transport{
public void run(){
System.out.println("我开着汽车");
}
}
public class AK47 implements Weapon{
public void shot(){
System.out.println("拿着AK47手枪");
}
}
public class Broom implements Transport{
public void run(){
System.out.println("我骑着扫帚..");
}
}
public class MagicStick implements Weapon {
public void shot(){
System.out.println("拿着魔法棒");
}
}
本文转自: http://blog.csdn.net/wxwzy738/article/details/7588562