版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chennai1101/article/details/84862434
本文为笔者学习《Head First设计模式》的笔记,并加入笔者自己的理解和归纳总结
工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。
结构图
不同的车(Car
)拥有不同的轮胎(Tyre
),但轮胎由车自由选择。
public abstract class Car {
String name;
Tyre tyre;
public Car(String name) {
this.name = name;
tyre = createTyre();
}
public abstract Tyre createTyre();
public void description() {
System.out.println(name + " use " + tyre.getDescription());
}
}
public interface Tyre {
String getDescription();
}
轮胎厂商有普利司通(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";
}
}
汽车型号有朗逸(Lavida
)、凌渡(Lamando
)、桑塔纳(Santana
),在各个子类内部分别创建不同的轮胎。
public class Lavida extends Car {
public Lavida() {
super("Lavida");
}
@Override
public Tyre createTyre() {
return new Bridgestone();
}
}
public class Lamando extends Car {
public Lamando() {
super("Lamando");
}
@Override
public Tyre createTyre() {
return new Michelin();
}
}
public class Santana extends Car {
public Santana() {
super("Santana");
}
@Override
public Tyre createTyre() {
return new Hankook();
}
}
运行
public static void main(String[] args) {
Car car = new Lamando();
car.description();
car = new Lavida();
car.description();
car = new Santana();
car.description();
}
输出
Lamando use Michelin
Lavida use Bridgestone
Santana use Hankook
相关文章
Java 设计模式之策略模式
Java 设计模式之观察者模式
Java 设计模式之装饰者模式
Java 设计模式之工厂方法模式
Java 设计模式之抽象工厂模式
Java 设计模式之单例模式