小结:
1.抽象工厂在产品族拓展方面不够灵活,在已存在产品族方面拓展不方便。
2.针对第1条,可以在抽象工厂设置一个方法,根据传递的类型选择产品、方案工厂。
3.一个工厂相当于一套相互依赖、相互匹配的产品、对象。比如某个游戏的皮肤,更换皮肤后皮肤的打击感、视觉就是一个工厂。
抽象工厂
public abstract class AbstractFactory {
public abstract PhoneFace createPhone();
public abstract IpadFace charge();
}
public class Factory1 extends AbstractFactory{
@Override
public PhoneFace createPhone() {
return new Phone("华为手机玩游戏");
}
@Override
public IpadFace charge() {
return new Ipad("使用华为充电线充电");
}
}
public class Factory2 extends AbstractFactory {
@Override
public PhoneFace createPhone() {
return new Phone("苹果手机玩游戏");
}
@Override
public IpadFace charge() {
return new Ipad("使用苹果充电线充电");
}
}
public interface IpadFace {
void play();
}
public interface PhoneFace {
void play();
}
public class Phone implements PhoneFace{
private String playWhat;
public Phone(String playWhat) {
this.playWhat = playWhat;
}
@Override
public void play() {
System.out.println(playWhat);
}
}
public class Ipad implements IpadFace{
private String playWhat;
public Ipad(String playWhat) {
this.playWhat = playWhat;
}
@Override
public void play() {
System.out.println(playWhat);
}
}