天天看點

設計模式-建立型-抽象工廠模式(Abstract Factory)

定義

為建立一組相關或互相依賴的對象提供一個接口,而且無需指定他們的具體類

角色

抽象工廠角色(Creator):抽象工廠角色是工廠方法模式的核心,與調用者直接互動用來提供産品。

具體工廠角色(Concrete Creator):這是實作抽象工廠接口的具體工廠類,包含與應用程式密切相關的邏輯,并且受到應用程式調用以建立産品對象。

抽象産品角色(Product):工廠方法模式所建立的對象的超類型,也就是産品對象的共同父類或共同擁有的接口。定義産品的規範,所有的産品實作都必須遵循産品接口定義的規範。

具體産品角色(Concrete Product):這個角色實作了抽象産品角色所定義的接口。某具體産品有專門的具體工廠建立,它們之間往往一一對應。

類圖

設計模式-建立型-抽象工廠模式(Abstract Factory)
package com.vapy.creator.AbstractFactory;
/**
 * 
 * @author vapy
 *
 */
public interface Phone {
    public void show();
}
           
package com.vapy.creator.AbstractFactory;
/**
 * 
 * @author vapy
 *
 */
public interface IPhone extends Phone {
    public void show();
}
           
package com.vapy.creator.AbstractFactory;
/**
 * 
 * @author vapy
 *
 */
public class Iphone7 implements IPhone {
    @Override
    public void show() {
        System.out.println("this is iphone7");
    }
}
           
package com.vapy.creator.AbstractFactory;
/**
 * 
 * @author vapy
 *
 */
public interface Samsung extends Phone {
    public void show();
}
           
package com.vapy.creator.AbstractFactory;
/**
 * 
 * @author vapy
 *
 */
public class SamsungS6 implements Samsung {
    @Override
    public void show() {
        System.out.println("this is Samsung s6");
    }
}
           
package com.vapy.creator.AbstractFactory;
/**
 * 
 * @author vapy
 *
 */
public interface IFactory {
    public Phone createIPhone();
    public Phone createSamsung();
}
           
package com.vapy.creator.AbstractFactory;
/**
 * 
 * @author vapy
 *
 */
public class Factory implements IFactory {
    @Override
    public IPhone createIPhone() {
        return new Iphone7();
    }

    @Override
    public Samsung createSamsung() {
        return new SamsungS6();
    }
}
           
package com.vapy.creator.AbstractFactory;
/**
 * 
 * @author vapy
 *
 */
public class Client {
    public static void main(String[] args) {
        IFactory factory = new Factory();
        factory.createIPhone().show();
        factory.createSamsung().show();
    }
}
           

總結

       簡單工廠模式、工廠方法模式、抽象工廠模式都屬于工廠模式,形式上也很相似,工廠方法模式針對的是一個産品等級結構 ,抽象工廠模式針對的是面向多個産品等級結構的,但他們的目的是一樣的,那就是解耦。個人認為在使用時不用太在意具體是哪個工廠模式,而應關注是否達到解耦的目的。

設計模式-建立型-抽象工廠模式(Abstract Factory)

本文代碼可在github檢視:點選此處

繼續閱讀