《冒号课堂编程范式与OOP思想》 13.1 创建模式笔记
工厂家族
构造器的弊端:名字必须与类名一致,缺乏表现力;每次调用都会创建新对象;无法多态,new 必须使用具体类型,没法使用抽象的超类型。
抽象工厂模式:
1. 把静态工厂拆分成了一个接口和若干个实现类;
2. 把工厂方法模式中的主题类中的抽象工厂方法提炼为一个接口,用对象合成取代了类继承。
代码说明示例
1. 静态工厂模式:
public class StaticFactory {
public enum Type {
AWT, SWING
};
public static Container createFrame(Type type, String title) {
switch (type) {
case AWT:
return new Frame(title);
case SWING:
return new JFrame(title);
default:
return null;
}
}
public static Component createLabel(Type type, String text) {
switch (type) {
case AWT:
return new Label(text);
case SWING:
return new JLabel(text);
default:
return null;
}
}
}
// 使用静态公共方法的类
class LoginForm {
public Container createLoginWindow() {
// 使用前要指定具体的类型
StaticFactory.Type type = StaticFactory.Type.AWT;
Container frame = StaticFactory.createFrame(type, "标题");
Component label = StaticFactory.createLabel(type, "文本");
// 组装组件
return null;
}
}
每个创建对象的方法都通过参数来指定要创建的具体对象类型,调用方必须指定具体的类型。