定义
是围绕一个超级工厂创建其他工厂,超级工厂又称为其他工厂的工厂。
自我理解
抽象工厂,就是没有特定的工厂生产特定的产品,但是每个工厂都需要指定生产的组件,即特定的方法,所以称之为抽象工厂。
使用场景:
1.系统的产品中,有多于一个产品族,而系统只消费某一族的产品。
2.QQ 换皮肤,一整套一起换。
3.生成不同操作系统的程序。
优点:当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。
缺点:产品族扩展非常困难,要增加一个系列的某一产品,既要在抽象的 Creator 里加代码,又要在具体的里面加代码。
package 抽象工厂模式;
public class 抽象工厂模式 {
public static void main(String[] args) {
CarFactory Q3Factory = new Q3Factory();
Q3Factory.createBrake().brake();;
Q3Factory.createEngine().engine();
Q3Factory.createTire().tire();;
System.out.println("=====================================");
CarFactory Q7Factory = new Q7Factory();
Q7Factory.createBrake().brake();
Q7Factory.createEngine().engine();
Q7Factory.createTire().tire();
}
}
package 抽象工厂模式;
public abstract class CarFactory {
public abstract IBrake createBrake();
public abstract IEngine createEngine();
public abstract ITire createTire();
}
package 抽象工厂模式;
public class DomestEngine implements IEngine {
@Override
public void engine() {
// TODO Auto-generated method stub
System.out.println("国产引擎");
}
}
package 抽象工厂模式;
public interface IBrake {
void brake();
}
package 抽象工厂模式;
public interface IEngine {
void engine();
}
package 抽象工厂模式;
public class ImportEngine implements IEngine {
@Override
public void engine() {
// TODO Auto-generated method stub
System.out.println("进口引擎");
}
}
package 抽象工厂模式;
public interface ITire {
void tire();
}
package 抽象工厂模式;
public class NormalBrake implements IBrake {
@Override
public void brake() {
// TODO Auto-generated method stub
System.out.println("普通制动");
}
}
package 抽象工厂模式;
public class NormalTire implements ITire{
@Override
public void tire() {
// TODO Auto-generated method stub
System.out.println("普通轮胎");
}
}
package 抽象工厂模式;
public class Q3Factory extends CarFactory {
@Override
public IBrake createBrake() {
// TODO Auto-generated method stub
return new NormalBrake();
}
@Override
public IEngine createEngine() {
// TODO Auto-generated method stub
return new DomestEngine();
}
@Override
public ITire createTire() {
// TODO Auto-generated method stub
return new NormalTire();
}
}
package 抽象工厂模式;
public class Q7Factory extends CarFactory {
@Override
public IBrake createBrake() {
// TODO Auto-generated method stub
return new SeniorBrake();
}
@Override
public IEngine createEngine() {
// TODO Auto-generated method stub
return new ImportEngine();
}
@Override
public ITire createTire() {
// TODO Auto-generated method stub
return new SUVTire();
}
}
package 抽象工厂模式;
public class SeniorBrake implements IBrake {
@Override
public void brake() {
// TODO Auto-generated method stub
System.out.println("高级置动");
}
}
package 抽象工厂模式;
public class SUVTire implements ITire{
@Override
public void tire() {
// TODO Auto-generated method stub
System.out.println("越野轮胎");
}
}