《一天聊一个设计模式》 抽象工厂
生活随笔
收集整理的這篇文章主要介紹了
《一天聊一个设计模式》 抽象工厂
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
4. 抽象工廠(Abstract Factory)
Intent
提供一個接口,用于創建 相關的對象家族 。
Class Diagram
抽象工廠模式創建的是對象家族,也就是很多對象而不是一個對象,并且這些對象是相關的,也就是說必須一起創建出來。而工廠方法模式只是用于創建一個對象,這和抽象工廠模式有很大不同。
抽象工廠模式用到了工廠方法模式來創建單一對象,AbstractFactory 中的 createProductA() 和 createProductB() 方法都是讓子類來實現,這兩個方法單獨來看就是在創建一個對象,這符合工廠方法模式的定義。
至于創建對象的家族這一概念是在 Client 體現,Client 要通過 AbstractFactory 同時調用兩個方法來創建出兩個對象,在這里這兩個對象就有很大的相關性,Client 需要同時創建出這兩個對象。
從高層次來看,抽象工廠使用了組合,即 Cilent 組合了 AbstractFactory,而工廠方法模式使用了繼承。
Implementation
public class AbstractProductA { } public class AbstractProductB { } public class ProductA1 extends AbstractProductA { } public class ProductA2 extends AbstractProductA { } public class ProductB1 extends AbstractProductB { } public class ProductB2 extends AbstractProductB { } public abstract class AbstractFactory {abstract AbstractProductA createProductA();abstract AbstractProductB createProductB(); } public class ConcreteFactory1 extends AbstractFactory {AbstractProductA createProductA() {return new ProductA1();}AbstractProductB createProductB() {return new ProductB1();} } public class ConcreteFactory2 extends AbstractFactory {AbstractProductA createProductA() {return new ProductA2();}AbstractProductB createProductB() {return new ProductB2();} } public class Client {public static void main(String[] args) {AbstractFactory abstractFactory = new ConcreteFactory1();AbstractProductA productA = abstractFactory.createProductA();AbstractProductB productB = abstractFactory.createProductB();// do something with productA and productB} }JDK
- javax.xml.parsers.DocumentBuilderFactory
- javax.xml.transform.TransformerFactory
- javax.xml.xpath.XPathFactory
總結
以上是生活随笔為你收集整理的《一天聊一个设计模式》 抽象工厂的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 农行聚合码手续费
- 下一篇: 成都个人征信报告打印网点