设计模式:工厂方法模式

工厂方法模式(Factory Method Pattern)是一种创建型设计模式,它定义一个创建对象的接口,但由子类决定实例化哪一个类。工厂方法使得一个类的实例化延迟到其子类。

关键点
  1. 工厂方法:定义一个创建对象的接口,但由子类决定具体实例化的类。
  2. 抽象产品:定义产品的公共接口或抽象类。
  3. 具体产品:实现抽象产品接口或继承抽象产品类的具体产品类。
  4. 抽象工厂:定义工厂方法以创建抽象产品。
  5. 具体工厂:实现工厂方法以创建具体产品。
优点
  • 遵循开闭原则:增加新产品时,只需要增加新的具体工厂和具体产品类,不需要修改已有代码。
  • 解耦产品的创建与使用:客户端通过抽象工厂接口来创建产品,不需要知道具体产品的类名。
缺点
  • 类的数量增加:每增加一种产品,都需要增加相应的具体产品类和具体工厂类。

代码实现

场景

假设我们要设计一个图形绘制程序,需要支持创建不同类型的形状(如圆形、矩形和三角形)。我们使用工厂方法模式来实现这一需求。

代码结构
  1. Shape:抽象产品类。

  2. Circle、Rectangle、Triangle:具体产品类。

  3. ShapeFactory:抽象工厂类。

  4. CircleFactory、RectangleFactory、TriangleFactory:具体工厂类。

  5. Main:测试类,演示工厂方法模式的使用。

  6. Shape.java:抽象产品类。

    public interface Shape {
        void draw();
    }
    
  7. Circle.java:具体产品类,表示圆形。

    public class Circle implements Shape {
        @Override
        public void draw() {
            System.out.println("Drawing a Circle");
        }
    }
    
  8. Rectangle.java:具体产品类,表示矩形。

    public class Rectangle implements Shape {
        @Override
        public void draw() {
            System.out.println("Drawing a Rectangle");
        }
    }
    
  9. Triangle.java:具体产品类,表示三角形。

    public class Triangle implements Shape {
        @Override
        public void draw() {
            System.out.println("Drawing a Triangle");
        }
    }
    
  10. ShapeFactory.java:抽象工厂类。

    public abstract class ShapeFactory {
        // 工厂方法,子类实现以创建具体产品
        public abstract Shape createShape();
    }
    
  11. CircleFactory.java:具体工厂类,负责创建圆形。

    public class CircleFactory extends ShapeFactory {
        @Override
        public Shape createShape() {
            return new Circle();
        }
    }
    
  12. RectangleFactory.java:具体工厂类,负责创建矩形。

    public class RectangleFactory extends ShapeFactory {
        @Override
        public Shape createShape() {
            return new Rectangle();
        }
    }
    
  13. TriangleFactory.java:具体工厂类,负责创建三角形。

    public class TriangleFactory extends ShapeFactory {
        @Override
        public Shape createShape() {
            return new Triangle();
        }
    }
    
  14. Main.java:测试类,演示工厂方法模式的使用。

    public class Main {
        public static void main(String[] args) {
            // 使用具体工厂创建不同类型的形状
            ShapeFactory circleFactory = new CircleFactory();
            ShapeFactory rectangleFactory = new RectangleFactory();
            ShapeFactory triangleFactory = new TriangleFactory();
    
            Shape circle = circleFactory.createShape();
            Shape rectangle = rectangleFactory.createShape();
            Shape triangle = triangleFactory.createShape();
    
            // 绘制形状
            circle.draw();
            rectangle.draw();
            triangle.draw();
        }
    }
    
  • 16
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值