Java使用设计模式中的工厂方法模式实例解析
什么是工厂方法模式
工厂方法模式是一种创建型设计模式。该模式使用工厂方法来解决对象创建的问题,即不直接使用new关键字来创建对象,而是通过工厂方法来创建。工厂方法是一个抽象方法,其返回类型为一个接口或抽象类,由不同的具体工厂来实现这个抽象方法,从而生产不同的产品。工厂方法模式可以增加新的产品类而不需要修改现有的代码。
工厂方法模式的组成
工厂方法模式由四个部分组成:抽象产品(Product)类,具体产品(ConcreteProduct)类,抽象工厂(Factory)类和具体工厂(ConcreteFactory)类。
- 抽象产品(Product)类
抽象产品类是一个抽象类或接口,由工厂方法创建的所有产品都必须实现它。
- 具体产品(ConcreteProduct)类
具体产品类是实现抽象产品接口的类。一般来说,一个工厂只会生产一个具体产品。
- 抽象工厂(Factory)类
抽象工厂类是一个抽象类或接口,它定义了工厂方法,用于创建不同的具体产品。
- 具体工厂(ConcreteFactory)类
具体工厂类实现了抽象工厂接口,它能够创建具体产品的实例。
工厂方法模式的优点和缺点
工厂方法模式的优点:
-
工厂方法模式可以将产品类的实例化过程和客户端代码解耦,从而降低了系统的耦合度。
-
工厂方法模式符合单一职责原则,每个具体工厂都负责创建一种产品,从而代码更加清晰简洁。
-
工厂方法模式扩展性良好,新的具体产品类只需要实现抽象产品类并由具体工厂类创建即可。
工厂方法模式的缺点:
-
工厂方法模式增加了系统的抽象性和理解难度。
-
工厂方法模式需要增加额外的代码来创建抽象产品类和工厂类。
工厂方法模式示例
以下是一个简单的工厂方法模式的示例:
抽象产品类
public interface Shape {
void draw();
}
具体产品类
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("draw a circle");
}
}
public class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("draw a rectangle");
}
}
抽象工厂类
public interface ShapeFactory {
Shape createShape();
}
具体工厂类
public class CircleFactory implements ShapeFactory {
@Override
public Shape createShape() {
return new Circle();
}
}
public class RectangleFactory implements ShapeFactory {
@Override
public Shape createShape() {
return new Rectangle();
}
}
使用工厂方法模式创建对象
public static void main(String[] args) {
ShapeFactory circleFactory = new CircleFactory();
ShapeFactory rectangleFactory = new RectangleFactory();
Shape circle = circleFactory.createShape();
Shape rectangle = rectangleFactory.createShape();
circle.draw();
rectangle.draw();
}
运行结果:
draw a circle
draw a rectangle
该示例中,抽象产品类为Shape
,具体产品类为Circle
和Rectangle
,抽象工厂类为ShapeFactory
,具体工厂类为CircleFactory
和RectangleFactory
。
我们通过在客户端代码中调用具体工厂的createShape()
方法,即可创建不同的产品实例。
另外一个示例:
抽象产品类
public interface Animal {
void eat();
}
具体产品类
public class Dog implements Animal {
@Override
public void eat() {
System.out.println("Dog eats bone");
}
}
public class Cat implements Animal {
@Override
public void eat() {
System.out.println("Cat eats fish");
}
}
抽象工厂类
public interface AnimalFactory {
Animal createAnimal();
}
具体工厂类
public class DogFactory implements AnimalFactory {
@Override
public Animal createAnimal() {
return new Dog();
}
}
public class CatFactory implements AnimalFactory {
@Override
public Animal createAnimal() {
return new Cat();
}
}
使用工厂方法模式创建对象
public static void main(String[] args) {
AnimalFactory dogFactory = new DogFactory();
AnimalFactory catFactory = new CatFactory();
Animal dog = dogFactory.createAnimal();
Animal cat = catFactory.createAnimal();
dog.eat();
cat.eat();
}
运行结果:
Dog eats bone
Cat eats fish
该示例中,抽象产品类为Animal
,具体产品类为Dog
和Cat
,抽象工厂类为AnimalFactory
,具体工厂类为DogFactory
和CatFactory
。
我们通过在客户端代码中调用具体工厂的createAnimal()
方法,即可创建不同的产品实例。
以上便是关于工厂方法模式的详细讲解和示例。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java使用设计模式中的工厂方法模式实例解析 - Python技术站