且看BorderFactory部分源代码:
public class BorderFactory{
private BorderFactory()
{
}
public static Border createLineBorder(Color color) {
return new LineBorder(color, 1);
}
public static Border createLineBorder(Color color, int i) {
return new LineBorder(color, i);
}
public static Border createRaisedBevelBorder() {
return createSharedBevel(0);
}
public static Border createLoweredBevelBorder() {
return createSharedBevel(1);
}
...
}
可以看到,JDK工作者们禁止对BorderFactory类进行实例化,用了private构造器,然后是各种static的方法用于生产各种类型的Border。从源代码可以看到,方法的实现很简单,就是返回一个Border类型的实例。Border其实是接口类型的:
public interface Border {
public abstract void paintBorder(Component component, Graphics g, int i, int j, int k, int l);
public abstract Insets getBorderInsets(Component component);
public abstract boolean isBorderOpaque();
}
实现该接口的是AbstractBorder抽象类,而我们使用的LineBorder,LoweredBevelBorder等等都是继承了这个抽象类的。
以上就是和工厂方法模式相关的类,现在分析一下:
工厂方法模式将对象的创建和使用分离达到解耦合的效果,其参与者有一下四种:
产品:对应于这里,就是LineBorder等各种类型的Border了
抽象产品:Border接口
工厂:BorderFactory类
抽象工厂:这里没有抽象工厂
工厂方法模式典型的例子是:
interface Product{}
class Product1 implements Product{}
class Product1 implements Product{}
interface Factory{Product factory();}
class Product1Factory implements Factory{public Product factory(){return new Product1();}}
class Product2Factory implements Factory{public Product factory(){return new Product2();}}
...
其中,在复杂的系统中,factory方法中可能还需要做很多其他复杂的事情。