(五)抽象工厂模式详解 (五)

2014-11-24 10:41:11 · 作者: · 浏览: 4
s MyFactory{

public MyProduct getMyProduct() {
return new MyProductA();
}

}

//我们自己特有的工厂B,产生产品B
class MyFactoryB implements MyFactory{

public MyProduct getMyProduct() {
return new MyProductB();
}

}

/* 到这里是我们自己的一套工厂方法模式,去创造我们自己的产品,以下我们将以上二者组合 */

//我们使用组合的方式将我们的产品系列和jar包中的产品组合起来
class AssortedFactory implements MyFactory,Factory{

MyFactory myFactory;
Factory factory;

public AssortedFactory(MyFactory myFactory, Factory factory) {
super();
this.myFactory = myFactory;
this.factory = factory;
}

public Product getProduct() {
return factory.getProduct();
}

public MyProduct getMyProduct() {
return myFactory.getMyProduct();
}

}

//抽象产品
interface Product{}

//具体产品
class ProductA implements Product{}
class ProductB implements Product{}

//工厂接口
interface Factory{
Product getProduct();
}

//具体的工厂A,创造产品A
class FactoryA implements Factory{

public Product getProduct() {
return new ProductA();
}

}
//具体的工厂B,创造产品B
class FactoryB implements Factory{

public Product getProduct() {
return new ProductB();
}

}

/* 假设以上是一个第三方jar包中的工厂方法模式,我们无法改动源码 */

//我们自己特有的产品
interface MyProduct{}

//我们自己特有的产品实现
class MyProductA implements MyProduct{}
class MyProductB implements MyProduct{}

//我们自己的工厂接口
interface MyFactory{
MyProduct getMyProduct();
}

//我们自己特有的工厂A,产生产品A
class MyFactoryA implements MyFactory{

public MyProduct getMyProduct() {
return new MyProductA();
}

}

//我们自己特有的工厂B,产生产品B
class MyFactoryB implements MyFactory{

public MyProduct getMyProduct() {
return new MyProductB();
}

}

/* 到这里是我们自己的一套工厂方法模式,去创造我们自己的产品,以下我们将以上二者组合 */

//我们使用组合的方式将我们的产品系列和jar包中的产品组合起来
class AssortedFactory implements MyFactory,Factory{

MyFactory myFactory;
Factory factory;

public AssortedFactory(MyFactory myFactory, Factory factory) {
super();
this.myFactory = myFactory;
this.factory = factory;
}

public Product getProduct() {
return factory.getProduct();
}

public MyProduct getMyProduct() {
return myFactory.getMyProduct();
}

} 可以看到,组合的工厂AssortedFactory集成了我们自己的工厂和jar包中的工厂两者的功能。这样做则会非常灵活,因为我们的一套体系不再依赖于jar包中的类或接口而存在,哪怕是jar包中的类改变或者不在了,我们自己的这一套依旧可以独立存在。

从上面就可以看出,我们在处理很多问题的时候其实是有很多种方式的,而且每一种方式可能都有各自的好处和坏处,很难去判断说那一种方式是最好的,而且也根本就没有这个说法,所以我们能做的,就是根据实际的情况去掂量各个方式的利弊,从而选择出一种更适合当前情况的处理方式。

本期抽象工厂模式就到这里了,希望各位看到这里对三个与工厂相关的模式有一定自己的理解,并且可以灵活使用,达到无模式就是最好的模式的境界,甚至,我们可以把我们自己写的东西起个名字,冒充设计模式,比如最后一种我们叫它组合工厂模式。当然,LZ本人并未达到无模式的境界,正在与各位一起努力。

感谢各位的收看。

下期预告,目测是观察者模式。