小偷公司(文三西路口红灯偷盗)—工厂模式 包括(简单工厂,工厂方法,抽象工厂)(三)
Posted on 2010-04-17 23:00 YeanJay 阅读(466) 评论(0) 编辑 收藏 举报小偷公司越来越大,开始开起了分公司,这样就成了小偷公司的家族了。在北京有公司,在杭州有公司。由于每个地方的人的明锐程度不同,所以对于每个地方的小偷的
使用的道具也不同,当然也就是偷盗的方式是不同的。在北京有北京的偷盗方式,在杭州有杭州的偷盗方式。这就是一个小偷公司的抽象工厂了。就偷手机和偷相机这样两种来
说,在北京和在杭州的偷盗方式是不同的,所以偷手机就是一个抽象类(接口),同样,偷相机也是一个抽象类。也就是抽象产品了,在北京偷手机类就是一个具体产品了。
直接上类图:
有图有真相啊,一张图基本上说明白了所有的事情。那解释就少一点了。附件里面有代码,是JAVA版本的。其实基本上已经在途中的红蓝紫三个气泡框里面已经实现了的。
下面就只写出客户端的代码,并且加以分析:
package DesignPattern.AbstractFactory;
public class AbstractFactoryTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
IStealCompanyFactory stealCamera = new BeijingStealCompanyFactory();
IStealCamera stealCameraInstance = stealCamera.createStealCamera();
stealCameraInstance.StealCamera();
}
}
这里客户端先声明一个抽象工厂接口的变量,接下来实例化一个具体工厂的对象,然后将该对象赋值给该接口变量。我实例化了一个北京的小偷公司这样一个具体工厂的对象,
然后通过调用该接口的createStealCamera()方法来只是去生产一个具体产品,也就是生产了一个北京偷相机的一个具体的产品,因为北京偷相机的具体产品类是实现了偷相机这样一个抽象接口的方法的。所以将产生的这个具体产品赋值给这个偷相机这个接口。
然后通过调用该接口中的StealCamera()方法来执行。
最后显示的结果:
我是北京偷摄像机的!
总结:
抽象工厂主要是提供了创建一系列相关或相互依赖对象的接口,而无需制定他们具体的类。(引自设计模式) 。最大的好处就是可以变换产品体系。比如当前这个例子,如果我要北京偷相机的改成杭州偷相机的,我只要该一句话。IStealCompanyFactory stealCamera = new BeijingStealCompanyFactory();将这句的new BeijingStealCompanyFactory();改成new HangzhouStealCompanyFactory();达到了最小化修改。