简单工厂、工厂方法、抽象工厂模式-这仨货的区别
发布人:shili8
发布时间:2023-12-04 10:46
阅读次数:99
在软件开发中,常常会用到工厂模式来创建对象,其中包括简单工厂、工厂方法和抽象工厂模式。这三种工厂模式在实际应用中有着不同的特点和用途。
简单工厂模式:
简单工厂模式是最简单的工厂模式,它通过一个工厂类来创建对象。客户端只需要知道工厂类的名称,而不需要知道具体的产品类。下面是一个简单工厂模式的示例代码:
java // 定义产品接口 public interface Product { void show(); } // 具体产品类A public class ConcreteProductA implements Product { @Override public void show() { System.out.println(This is product A); } } // 具体产品类B public class ConcreteProductB implements Product { @Override public void show() { System.out.println(This is product B); } } // 简单工厂类 public class SimpleFactory { public Product createProduct(String type) { if (A.equals(type)) { return new ConcreteProductA(); } else if (B.equals(type)) { return new ConcreteProductB(); } return null; } } // 客户端代码 public class Client { public static void main(String[] args) { SimpleFactory factory = new SimpleFactory(); Product productA = factory.createProduct(A); productA.show(); Product productB = factory.createProduct(B); productB.show(); } }
工厂方法模式:
工厂方法模式是在简单工厂模式的基础上,将工厂类抽象成接口,每个具体产品对应一个具体工厂类。这样可以实现更好的扩展性,每个产品的创建都由对应的工厂类来完成。下面是一个工厂方法模式的示例代码:
java // 定义产品接口 public interface Product { void show(); } // 具体产品类A public class ConcreteProductA implements Product { @Override public void show() { System.out.println(This is product A); } } // 具体产品类B public class ConcreteProductB implements Product { @Override public void show() { System.out.println(This is product B); } } // 工厂接口 public interface Factory { Product createProduct(); } // 具体工厂类A public class ConcreteFactoryA implements Factory { @Override public Product createProduct() { return new ConcreteProductA(); } } // 具体工厂类B public class ConcreteFactoryB implements Factory { @Override public Product createProduct() { return new ConcreteProductB(); } } // 客户端代码 public class Client { public static void main(String[] args) { Factory factoryA = new ConcreteFactoryA(); Product productA = factoryA.createProduct(); productA.show(); Factory factoryB = new ConcreteFactoryB(); Product productB = factoryB.createProduct(); productB.show(); } }
抽象工厂模式:
抽象工厂模式是在工厂方法模式的基础上,将工厂接口抽象成一个抽象工厂类,每个具体工厂类对应一个产品族,可以创建多个产品。下面是一个抽象工厂模式的示例代码:
java // 定义产品接口 public interface Product { void show(); } // 具体产品类A public class ConcreteProductA implements Product { @Override public void show() { System.out.println(This is product A); } } // 具体产品类B public class ConcreteProductB implements Product { @Override public void show() { System.out.println(This is product B); } } // 抽象工厂接口 public interface AbstractFactory { Product createProductA(); Product createProductB(); } // 具体工厂类1 public class ConcreteFactory1 implements AbstractFactory { @Override public Product createProductA() { return new ConcreteProductA(); } @Override public Product createProductB() { return new ConcreteProductB(); } } // 具体工厂类2 public class ConcreteFactory2 implements AbstractFactory { @Override public Product createProductA() { return new ConcreteProductA(); } @Override public Product createProductB() { return new ConcreteProductB(); } } // 客户端代码 public class Client { public static void main(String[] args) { AbstractFactory factory1 = new ConcreteFactory1(); Product productA1 = factory1.createProductA(); productA1.show(); Product productB1 = factory1.createProductB(); productB1.show(); AbstractFactory factory2 = new ConcreteFactory2(); Product productA2 = factory2.createProductA(); productA2.show(); Product productB2 = factory2.createProductB(); productB2.show(); } }
总结:
简单工厂模式是通过一个工厂类来创建对象,工厂方法模式是将工厂类抽象成接口,每个具体产品对应一个具体工厂类,抽象工厂模式是将工厂接口抽象成一个抽象工厂类,每个具体工厂类对应一个产品族。这三种工厂模式在实际应用中有着不同的特点和用途,可以根据具体的需求来选择合适的工厂模式。