看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抽象类,而我们使用的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方法中可能还需要做很多其他复杂的事情。
- 看BorderFactory源代码学工厂方法
- BorderFactory
- 我看'工厂模式'--->"简单工厂、工厂方法、抽象工厂"
- 简单工厂上看工厂方法
- 【设计模式】全局看 简单工厂 -工厂方法- 抽象工厂
- Java BorderFactory
- 学点设计模式-工厂方法模式
- vim+cscope+ctags看源代码的方法
- myeclipse看源代码方便的方法
- 看源代码
- 看源代码
- 从建水厂看简单工厂、工厂方法模式和抽象工厂之间的区别
- 设计模式——工厂方法 Java源代码
- 跟JBPM学设计模式之工厂方法模式
- 用Delphi学设计模式之工厂方法篇
- 跟着Android学设计模式:工厂方法(Factory method)
- 每天学一点设计模式-工厂方法模式
- 结合Android学设计模式--工厂方法(FactoryMethod)
- [笔记][Postgres]libpq C API学习笔记
- Android开发学习笔记:浅谈WebView
- 1个字节占多少个16进制位
- MyEclipse-2013/专业版/spring/blue的破解过程
- 设计模式之单例模式
- 看BorderFactory源代码学工厂方法
- 15开发前的准备:三层架构搭建及使用
- java中静态代码块的用法 static用法详解
- 设置eclipse控制台上的信息输入到某个文件
- 在git commit前,频繁的git add可能会产生不必要的悬空(dangling)对象
- static静态代码块与非静态代码块 + 构造函数
- 语音数字信号处理技术应用 --- 创新点头脑风暴
- td超出宽度隐藏用点显示的问题
- 创建线程(Background Thread)的N种方式