下面内容摘自《java与模式》
[img]http://dl.iteye.com/upload/attachment/493516/e9d6356f-5897-3981-a57d-42523a20136b.jpg[/img]
[img]http://dl.iteye.com/upload/attachment/493544/3c22f5a7-18f6-348b-af72-85e03baacaf0.jpg[/img]
如果每个抽象产品都有多于一个的具体子类,那么抽象工厂就可以提供多个具体工厂角色,分泌对应于相应的具体产品角色,即每个具体工厂类负责创建抽象产品的某个具体子类的实例。
“抽象工厂”---“抽象”来自“抽象产品角色”,而“抽象工厂”就是抽象产品角色的工厂。
抽象工厂模式面对的问题是多个产品等级结构的系统设计的。
抽象工厂模式与工厂方法模式的最大区别就在于,工厂方法模式针对的是一个产品等级结构;而抽象工厂模式则需要面对多个产品等级结构。
[img]http://dl.iteye.com/upload/attachment/493575/260ec01f-1b89-3fdd-9cf1-c98ec1356040.jpg[/img]
[img]http://dl.iteye.com/upload/attachment/493577/f68e2f10-73c3-36fb-97e4-5b53a1740726.jpg[/img]
[img]http://dl.iteye.com/upload/attachment/493579/658e8a60-2019-39ab-95c4-ef9beb3684c2.jpg[/img]
注意第二条,即系统只消费其中某一族的产品。抽象工厂模式的起源:
[img]http://dl.iteye.com/upload/attachment/493581/91348919-5ca7-3278-b620-638470e7f118.jpg[/img]
[img]http://dl.iteye.com/upload/attachment/493583/2eaca841-d341-3ca9-8813-007a6a1c3134.jpg[/img]
[img]http://dl.iteye.com/upload/attachment/493585/c6e675c6-a9e3-37ec-8596-e80a6f3d51dd.jpg[/img]
相关的模式
1:具体工厂类可以设计成单例类(单例模式)
2:抽象工厂类可以配备静态方法,以返还具体工厂的实例。具体地讲,抽象工厂角色可以配备一个静态方法,这个方法按照参数的值,返回所对应的具体该ing从的实例。静态方法返回的类型是抽象工厂类型,这样可以在多态性的保证之下,允许静态工厂方法自行决定哪一个具体工厂符合要求。
3:也可以为每一个具体工厂类配备一个静态方法,而其返回类型是该具体工厂类自己。
[img]http://dl.iteye.com/upload/attachment/493516/e9d6356f-5897-3981-a57d-42523a20136b.jpg[/img]
[img]http://dl.iteye.com/upload/attachment/493544/3c22f5a7-18f6-348b-af72-85e03baacaf0.jpg[/img]
如果每个抽象产品都有多于一个的具体子类,那么抽象工厂就可以提供多个具体工厂角色,分泌对应于相应的具体产品角色,即每个具体工厂类负责创建抽象产品的某个具体子类的实例。
“抽象工厂”---“抽象”来自“抽象产品角色”,而“抽象工厂”就是抽象产品角色的工厂。
抽象工厂模式面对的问题是多个产品等级结构的系统设计的。
抽象工厂模式与工厂方法模式的最大区别就在于,工厂方法模式针对的是一个产品等级结构;而抽象工厂模式则需要面对多个产品等级结构。
[img]http://dl.iteye.com/upload/attachment/493575/260ec01f-1b89-3fdd-9cf1-c98ec1356040.jpg[/img]
[img]http://dl.iteye.com/upload/attachment/493577/f68e2f10-73c3-36fb-97e4-5b53a1740726.jpg[/img]
[img]http://dl.iteye.com/upload/attachment/493579/658e8a60-2019-39ab-95c4-ef9beb3684c2.jpg[/img]
注意第二条,即系统只消费其中某一族的产品。抽象工厂模式的起源:
[img]http://dl.iteye.com/upload/attachment/493581/91348919-5ca7-3278-b620-638470e7f118.jpg[/img]
[img]http://dl.iteye.com/upload/attachment/493583/2eaca841-d341-3ca9-8813-007a6a1c3134.jpg[/img]
[img]http://dl.iteye.com/upload/attachment/493585/c6e675c6-a9e3-37ec-8596-e80a6f3d51dd.jpg[/img]
相关的模式
1:具体工厂类可以设计成单例类(单例模式)
2:抽象工厂类可以配备静态方法,以返还具体工厂的实例。具体地讲,抽象工厂角色可以配备一个静态方法,这个方法按照参数的值,返回所对应的具体该ing从的实例。静态方法返回的类型是抽象工厂类型,这样可以在多态性的保证之下,允许静态工厂方法自行决定哪一个具体工厂符合要求。
3:也可以为每一个具体工厂类配备一个静态方法,而其返回类型是该具体工厂类自己。