看BorderFactory源代码学工厂方法

来源:互联网 发布:淘梦网络 编辑:程序博客网 时间:2024/04/29 06:27

且看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抽象类,而我们使用的LineBorderLoweredBevelBorder等等都是继承了这个抽象类的。

以上就是和工厂方法模式相关的类,现在分析一下:

工厂方法模式将对象的创建和使用分离达到解耦合的效果,其参与者有一下四种:

产品:对应于这里,就是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方法中可能还需要做很多其他复杂的事情。

















原创粉丝点击