Go和Java实现工厂方法模式

48 阅读2分钟

工厂方法模式是一种常用的创建型设计模式,它通过定义一个创建对象的接口,但具体创建哪个对象则由子类决定。下面是使用Go和Java分别实现工厂方法模式的示例:

Go实现工厂方法模式的代码示例:

// 定义产品接口
type Product interface {
    GetName() string
}

// 具体产品1
type ConcreteProduct1 struct{}

func (p *ConcreteProduct1) GetName() string {
    return "Product 1"
}

// 具体产品2
type ConcreteProduct2 struct{}

func (p *ConcreteProduct2) GetName() string {
    return "Product 2"
}

// 定义工厂接口
type Factory interface {
    CreateProduct() Product
}

// 具体工厂1
type ConcreteFactory1 struct{}

func (f *ConcreteFactory1) CreateProduct() Product {
    return &ConcreteProduct1{}
}

// 具体工厂2
type ConcreteFactory2 struct{}

func (f *ConcreteFactory2) CreateProduct() Product {
    return &ConcreteProduct2{}
}

// 客户端代码
func Client(factory Factory) {
    product := factory.CreateProduct()
    name := product.GetName()
    fmt.Println("Product Name:", name)
}

// 使用示例
func main() {
    factory1 := &ConcreteFactory1{}
    Client(factory1)

    factory2 := &ConcreteFactory2{}
    Client(factory2)
}

Java实现工厂方法模式的代码示例:

// 定义产品接口
interface Product {
    String getName();
}

// 具体产品1
class ConcreteProduct1 implements Product {
    public String getName() {
        return "Product 1";
    }
}

// 具体产品2
class ConcreteProduct2 implements Product {
    public String getName() {
        return "Product 2";
    }
}

// 定义工厂接口
interface Factory {
    Product createProduct();
}

// 具体工厂1
class ConcreteFactory1 implements Factory {
    public Product createProduct() {
        return new ConcreteProduct1();
    }
}

// 具体工厂2
class ConcreteFactory2 implements Factory {
    public Product createProduct() {
        return new ConcreteProduct2();
    }
}

// 客户端代码
public class Main {
    public static void client(Factory factory) {
        Product product = factory.createProduct();
        String name = product.getName();
        System.out.println("Product Name: " + name);
    }

    // 使用示例
    public static void main(String[] args) {
        Factory factory1 = new ConcreteFactory1();
        client(factory1);

        Factory factory2 = new ConcreteFactory2();
        client(factory2);
    }
}

通过工厂方法模式,我们可以通过调用工厂的方法来创建不同的产品对象,而无需在客户端直接实例化具体产品。这样的设计使得系统更加灵活,易于扩展和维护。

希望这个示例对你有帮助!如果你还有任何问题,请随时提问。


香港五网CN2网络云服务器链接:www.tsyvps.com

蓝易云香港五网CN2 GIA/GT精品网络服务器。拒绝绕路,拒绝不稳定。