|
factory的“本质”就是根据不同的输入创建出不同类型的对象。
引入factory的原因就是你需要根据不同的输入创建不同类型的对象。
简单工厂模式相当于是一个工厂中有各种产品,创建在一个类中,客户无需知道具体产品的名称,只需要知道产品类所对应的参数即可。但是工厂的职责过重,而且当类型过多时不利于系统的扩展维护。
工厂方法模式相当于在简单工厂模式的基础上增加一个抽象工厂,在简单工厂模式下如果增加一个产品,要修改工厂类,不符合开闭原则。在工厂方法下,只需要增加具体工厂和具体产品即可。
抽象工厂,类似于一个集团旗下生产的各种产品的工厂,这些产品是一个产品族。是在工厂方法下的扩展。比如一个产品的界面,可以通过直接改变具体工厂的实例来改变产品的界面风格。
java版
<span style="color: #0000ff;">public <span style="color: #0000ff;">class<span style="color: #000000;"> Home {
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> main(String[] args) {
Factory factory </span>= <span style="color: #0000ff;">new</span><span style="color: #000000;"> GoodsFactory();
Product product </span>=<span style="color: #000000;">factory.instance();
product.todo();
}
}
<span style="color: #008000;">//<span style="color: #008000;">这样感觉是工厂方法模式
<span style="color: #008000;">//<span style="color: #008000;">这是商品
<span style="color: #0000ff;">class<span style="color: #000000;"> Product{
<span style="color: #0000ff;">public <span style="color: #0000ff;">void<span style="color: #000000;"> todo(){
System.out.println("使用商品..."<span style="color: #000000;">);
}
}
<span style="color: #008000;">//<span style="color: #008000;">这是工厂
<span style="color: #0000ff;">abstract <span style="color: #0000ff;">class<span style="color: #000000;"> Factory{
<span style="color: #0000ff;">public <span style="color: #0000ff;">abstract<span style="color: #000000;"> Product instance();
}
<span style="color: #0000ff;">class GoodsFactory <span style="color: #0000ff;">extends<span style="color: #000000;"> Factory{
<span style="color: #0000ff;">public<span style="color: #000000;"> Product instance(){
<span style="color: #0000ff;">return <span style="color: #0000ff;">new<span style="color: #000000;"> Product();
}
}
js版:
PHP版:
"使用商品..."
instance( =Factory::instance('Product'->todo(); (编辑:安卓应用网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|