工厂模式, 有好几种, 工厂方法模式, 抽象工厂模式..
我不打算就它们的“工厂”的设计模式展开讨论, 就我以前的几个费解的地方进行说明.
普通模式
interface A
class B implement A{}
class C implement A{}
A a=new B();
A b=new C()
工厂模式
class factory{
....
A returnB(){
return new B();
}
}
看了上面两段代码, 可能有人会想说, 工厂模式就是一种封装, 可是这种包装有必要吗?
但实际上, 不注意的话, 我们是这样写的
interface A
class B implement A{}
class C implement A{}
B a=new B();
C b=new C()
所以, 也就是, 我们使用了具体class当作类型, 这里代码的提供方, 是(强迫性)地要我们只用接口提供的方法.
- 具体类当类型, 暴露出来的method会太多(冗余过多), 接口的好处( 暴露得越少, bug机率就越少)
另外的好处
new A(new f(),new g(),new h());
new A(new f(),new g());
将code(构造函数等)转换成一个method, 并注释. 也就是code转换成文字. 文字的好处: 利于维护.
这里, 可以发现, 其实工厂类方便结合IDE的提示功能. 好处在于我们知道一个类class 再用智能提醒, 就可以知道其他所有class. 并且智能提醒的注释是二次注释, 也就是针对性比较强
另外
工厂模式, 方便且大量扩展. 利用了“反射”, 多少体现它“平台性”