工厂方法的结构:
//product interface
interface IProduct{
public void f1();
public void f2();
}
//factory interface
interface IProductFacctory{
public Product getProduct();
}
class Product1 implements IProduct{
Product1(){} //constructor,package access
public void f1(){
//do something
}
public void f2(){
//do something
}
}
class Factory1 implements IProductFacctory{
public Product getProduct(){
return new Product1();
}
}
class Product2 implements IProduct{
Product2(){} //constructor,package access
public void f1(){
//do something
}
public void f2(){
//do something
}
}
class Factory2 implements IProductFacctory{
public Product getProduct(){
return new Product2();
}
}
public class Factories{
public static void ProductConsumer(IProductFacctory fact){
IProduct p = fact.getProduct();
p.f1();
p.f2();
}
public static void main(String[] args){
ProductConsumer(new Factory1());
ProductConsumer(new Factory2());
}
}
-------------------------------------------------------------------------------------------------------------
这种写法有什么好处呢?在 ProductConsumer函数里直接传入传入一个Product 对象不是也可以达到目的吗?
Factories改写如下:
public class Factories2{
public static void ProductConsumer(IProduct p){
p.f1();
p.f2();
}
public static void main(String[] args){
ProductConsumer(new Product1());
ProductConsumer(new Product2());
}
}
在这里是可以达到一样的效果,貌似不需要工厂类。
但是,有这样的一个场景,在ProductConsumer函数里面,需要的不是一个IProduct,而是多个IProduct,这时候,工厂类就大有用处了。
代码如下:
public class Factories3{
public static void ProductConsumer(IProductFacctory fact){
for(int i = 0; i < 10; i++){
IProduct p = fact.getProduct();
p.f1();
p.f2();
}
}
public static void main(String[] args){
ProductConsumer(new Factory1());
ProductConsumer(new Factory2());
}
}
所以,碰到以上场景,可以考虑用工厂类来设计。
//product interface
interface IProduct{
public void f1();
public void f2();
}
//factory interface
interface IProductFacctory{
public Product getProduct();
}
class Product1 implements IProduct{
Product1(){} //constructor,package access
public void f1(){
//do something
}
public void f2(){
//do something
}
}
class Factory1 implements IProductFacctory{
public Product getProduct(){
return new Product1();
}
}
class Product2 implements IProduct{
Product2(){} //constructor,package access
public void f1(){
//do something
}
public void f2(){
//do something
}
}
class Factory2 implements IProductFacctory{
public Product getProduct(){
return new Product2();
}
}
public class Factories{
public static void ProductConsumer(IProductFacctory fact){
IProduct p = fact.getProduct();
p.f1();
p.f2();
}
public static void main(String[] args){
ProductConsumer(new Factory1());
ProductConsumer(new Factory2());
}
}
-------------------------------------------------------------------------------------------------------------
这种写法有什么好处呢?在 ProductConsumer函数里直接传入传入一个Product 对象不是也可以达到目的吗?
Factories改写如下:
public class Factories2{
public static void ProductConsumer(IProduct p){
p.f1();
p.f2();
}
public static void main(String[] args){
ProductConsumer(new Product1());
ProductConsumer(new Product2());
}
}
在这里是可以达到一样的效果,貌似不需要工厂类。
但是,有这样的一个场景,在ProductConsumer函数里面,需要的不是一个IProduct,而是多个IProduct,这时候,工厂类就大有用处了。
代码如下:
public class Factories3{
public static void ProductConsumer(IProductFacctory fact){
for(int i = 0; i < 10; i++){
IProduct p = fact.getProduct();
p.f1();
p.f2();
}
}
public static void main(String[] args){
ProductConsumer(new Factory1());
ProductConsumer(new Factory2());
}
}
所以,碰到以上场景,可以考虑用工厂类来设计。