天天看點

設計模式之 Factory-簡單工廠,工廠方法,抽象工廠

作者:人間值得911
設計模式之 Factory-簡單工廠,工廠方法,抽象工廠

工廠模式可以分為三類:簡單工廠模式,工廠方法模式,抽象工廠模式

簡單工廠模式、工廠方法模式和抽象工廠模式都是建立型設計模式,用于在程式設計中解決對象建立的相關問題。它們的主要目的是在程式設計中解耦對象的建立過程,使代碼更加子產品化、可維護和可擴充。

簡單工廠模式

利:代碼比較簡潔,易于了解。對于某些情況下,簡單工廠模式可以減少重複代碼。

弊:代碼不夠靈活,一旦需要建立新的對象,就需要修改工廠方法的代碼。可能導緻代碼變得耦合,因為用戶端代碼依賴于工廠方法,而不是具體的類。

Java示例

// 抽象産品接口  
interface Product {  
    void operation();  
}  
  
// 具體産品A  
class ConcreteProductA implements Product {  
    @Override  
    public void operation() {  
        System.out.println("這是産品A");  
    }  
}  
  
// 具體産品B  
class ConcreteProductB implements Product {  
    @Override  
    public void operation() {  
        System.out.println("這是産品B");  
    }  
}  
  
// 工廠接口  
interface Factory {  
    Product createProduct();  
}  
  
// 具體工廠A  
class ConcreteFactoryA implements Factory {  
    @Override  
    public Product createProduct() {  
        return new ConcreteProductA();  
    }  
}  
  
// 具體工廠B  
class ConcreteFactoryB implements Factory {  
    @Override  
    public Product createProduct() {  
        return new ConcreteProductB();  
    }  
}           

工廠方法模式

工廠方法模式相比簡單工廠模式來說更加靈活,因為具體的工廠實作由子類來實作,當需要建立新的對象時,隻需要建立新的工廠類就可以了,不需要修改原來的代碼。這種模式的優點是可以減少代碼重複性,提高代碼複用性,使代碼更加可維護。

然而,工廠方法模式也有一些缺點。首先,它可能會增加系統的複雜性和開銷,因為需要建立更多的類和方法。其次,它可能會使代碼變得不夠直覺,因為需要編寫更多的抽象接口和抽象類。

Java示例

// 抽象産品接口  
interface Product {  
    void operation();  
}  
  
// 具體産品A  
class ConcreteProductA implements Product {  
    @Override  
    public void operation() {  
        System.out.println("這是産品A");  
    }  
}  
  
// 具體産品B  
class ConcreteProductB implements Product {  
    @Override  
    public void operation() {  
        System.out.println("這是産品B");  
    }  
}  
  
// 抽象工廠接口  
interface Factory {  
    Product createProduct();  
}  
  
// 具體工廠A  
class ConcreteFactoryA implements Factory {  
    @Override  
    public Product createProduct() {  
        return new ConcreteProductA();  
    }  
}  
  
// 具體工廠B  
class ConcreteFactoryB implements Factory {  
    @Override  
    public Product createProduct() {  
        return new ConcreteProductB();  
    }  
}           

抽象工廠模式

抽象工廠模式是一種更加抽象的工廠模式,它定義了一個抽象的工廠接口,以及一系列的産品接口。具體的工廠實作由子類來實作,而具體的産品實作也由子類來實作。這種模式的優點是可以使代碼更加子產品化、可維護和可擴充,可以建立一系列相關或獨立的産品。

然而,抽象工廠模式也有一些缺點。首先,它可能會增加系統的複雜性和開銷,因為需要建立更多的類和方法。其次,它可能會使代碼變得不夠直覺,因為需要編寫更多的抽象接口和抽象類。

Java示例

// 抽象産品接口  
interface Product {  
    void operation();  
}  
  
// 具體産品A  
class ConcreteProductA implements Product {  
    @Override  
    public void operation() {  
        System.out.println("這是産品A");  
    }  
}  
  
// 具體産品B  
class ConcreteProductB implements Product {  
    @Override  
    public void operation() {  
        System.out.println("這是産品B");  
    }  
}  
  
// 抽象工廠接口  
interface Factory {  
    Product createProduct();  
}  
  
// 具體工廠A  
class ConcreteFactoryA implements Factory {  
    @Override  
    public Product createProduct() {  
        return new ConcreteProductA();  
    }  
}  
  
// 具體工廠B  
class ConcreteFactoryB implements Factory {  
    @Override  
    public Product createProduct() {  
        return new ConcreteProductB();  
    }  
}           

總的來說,這三種工廠模式都可以解決對象建立的相關問題,但是它們的應用場景和優缺點都有所不同。在實際程式設計中,需要根據具體的需求來選擇合适的設計模式。

設計模式之 Factory-簡單工廠,工廠方法,抽象工廠

繼續閱讀