本文为笔者学习《Head First设计模式》的笔记,并加入笔者自己的理解和归纳总结
抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。
结构图
不同的车(Car
)拥有不同的轮胎(Tyre
),由不同轮胎工厂(TyreFactory
)创建。
public abstract class Car {
String name;
Tyre tyre;
public Car(String name, TyreFactory factory) {
this.name = name;
tyre = factory.createTyre();
}
public void description() {
System.out.println(name + " use " + tyre.getDescription());
}
}
public interface Tyre {
String getDescription();
}
public interface TyreFactory {
Tyre createTyre();
}
汽车型号有朗逸(Lavida
)、凌渡(Lamando
)、桑塔纳(Santana
)。
public class Lavida extends Car {
public Lavida() {
super("Lavida");
}
}
public class Lamando extends Car {
public Lamando() {
super("Lamando");
}
}
public class Santana extends Car {
public Santana() {
super("Santana");
}
}
轮胎厂商有普利司通(Bridgestone
)、韩泰(Hankook
)、米其林(Michelin
)等。
public class Bridgestone implements Tyre {
@Override
public String getDescription() {
return "Bridgestone";
}
}
public class Hankook implements Tyre {
@Override
public String getDescription() {
return "Hankook";
}
}
public class Michelin implements Tyre {
@Override
public String getDescription() {
return "Michelin";
}
}
轮胎工厂有普利司通(BridgestoneFactory
)、韩泰(HankookFactory
)、米其林(MichelinFactory
)等。
public class BridgestoneFactory implements TyreFactory {
@Override
public Tyre createTyre() {
return new Bridgestone();
}
}
public class HankookFactory implements TyreFactory {
@Override
public Tyre createTyre() {
return new Hankook();
}
}
public class MichelinFactory implements TyreFactory {
@Override
public Tyre createTyre() {
return new Michelin();
}
}
运行
public static void main(String[] args) {
Car car = new Lamando(new MichelinFactory());
car.description();
car = new Lavida(new BridgestoneFactory());
car.description();
car = new Santana(new HankookFactory());
car.description();
}
输出
相关文章
Java 设计模式