您现在的位置是:首页 >技术杂谈 >【设计模式】| 修炼内功 | 23种设计模式——工厂方法模式(含抽象)网站首页技术杂谈

【设计模式】| 修炼内功 | 23种设计模式——工厂方法模式(含抽象)

狮子也疯狂 2024-06-17 10:13:27
简介【设计模式】| 修炼内功 | 23种设计模式——工厂方法模式(含抽象)

设计模式如同织锦之艺术,精心构筑,展示优美。
学习设计模式,犹如追逐清晨的曙光,扉页掀开了人生的新篇章。当你学会设计模式的奥秘,就如同走进了灯火通明的城市,丰富多彩的建筑,让你大开眼界,拥有了整个世界般的视野。
设计模式如同一面明镜,让人自省和反思,看清自己的不足;同时也是一盏明灯,照亮你前行的道路。
它像是一座桥,将你从学生的世界带入到职业的殿堂,让你稳步前行。
学习设计模式,让你的代码更有灵魂,更有温度,更有品味。
它是一种成长,是一种提升,更是一种追求卓越的态度。
让我们一起学习设计模式,饱览编程之美!

快来和?一起学习设计模式叭,修炼内功无上心法!!!
在这里插入图片描述

一. ? 设计模式?知道

23种设计模式可以按照其功能划分为三类,分别是创建型模式、结构型模式和行为型模式,具体如下:

1. 创建型模式:

  • 工厂方法模式(Factory Method)
  • 抽象工厂模式(Abstract Factory)
  • 单例模式(Singleton)
  • 建造者模式(Builder)
  • 原型模式(Prototype)

2. 结构型模式:

  • 适配器模式(Adapter)
  • 桥接模式(Bridge)
  • 组合模式(Composite)
  • 装饰器模式(Decorator)
  • 外观模式(Facade)
  • 享元模式(Flyweight)
  • 代理模式(Proxy)

3. 行为型模式:

  • 职责链模式(Chain of Responsibility)
  • 命令模式(Command)
  • 解释器模式(Interpreter)
  • 迭代器模式(Iterator)
  • 中介者模式(Mediator)
  • 备忘录模式(Memento)
  • 观察者模式(Observer)
  • 状态模式(State)
  • 策略模式(Strategy)
  • 模板方法模式(Template Method)
  • 访问者模式(Visitor)

以上23种设计模式都是经典的设计模式,它们被广泛应用于软件开发中,以提高代码的可复用性、扩展性、灵活性和可维护性。

二. ? 目标掌握?

1. 工厂模式

定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。

Ⅰ. 代码实现

// 定义一个接口
interface Animal {
   void speak();
}

// 定义Dog类实现Animal接口
class Dog implements Animal {
   @Override
   public void speak() {
      System.out.println("汪汪汪!");
   }
}

// 定义Cat类实现Animal接口
class Cat implements Animal {
   @Override
   public void speak() {
      System.out.println("喵喵喵!");
   }
}

// 定义动物工厂类,用于创建不同类型的动物对象
class AnimalFactory {
   public Animal createAnimal(String animalType) {
      if (animalType.equalsIgnoreCase("dog")) {
         return new Dog();
      } else if (animalType.equalsIgnoreCase("cat")) {
         return new Cat();
      }
      return null;
   }
}

// 测试代码
public class FactoryMethodDemo {
   public static void main(String[] args) {
      AnimalFactory animalFactory = new AnimalFactory();

      // 创建Dog对象并调用speak方法
      Animal dog = animalFactory.createAnimal("DOG");
      dog.speak();

      // 创建Cat对象并调用speak方法
      Animal cat = animalFactory.createAnimal("CAT");
      cat.speak();
   }
}

Ⅱ. 使用场景

JDBC连接数据库,硬件访问,降低对象的产生和销毁

2. 抽象工厂模式

是一种工厂模式,它提供了一种创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

Ⅰ. 代码实现

  1. 场景:假设有一个“图形”接口,具有一个“绘制”方法。现在需要实现两个具体的图形类:矩形和圆形。同时,还需要实现一个“图形工厂”接口,其中包含两个方法:一个用于创建矩形,另一个用于创建圆形。最后,我们需要一个“工厂生成器”类,用于创建不同类型的图形工厂。

  2. 代码如下:

首先,创建“图形”接口:

public interface Shape {
    void draw();
}

接着,创建具体的图形类:矩形和圆形。它们都实现了“图形”接口。

public class Rectangle implements Shape {
    @Override
    public void draw() {
        System.out.println("Inside Rectangle::draw() method.");
    }
}

public class Circle implements Shape {
    @Override
    public void draw() {
        System.out.println("Inside Circle::draw() method.");
    }
}

最后,创建“工厂生成器”类,用于创建不同类型的图形工厂。在本例中,我们仅实现了两种类型的图形工厂:“简单工厂”和“高级工厂”。

public class FactoryGenerator {
    public static ShapeFactory createFactory(boolean simple) {
        if (simple) {
            return new SimpleShapeFactory();
        } else {
            return new AdvancedShapeFactory();
        }
    }
}

public class SimpleShapeFactory implements ShapeFactory {
    @Override
    public Shape createRectangle() {
        return new Rectangle();
    }

    @Override
    public Shape createCircle() {
        return new Circle();
    }
}

public class AdvancedShapeFactory implements ShapeFactory {
    @Override
    public Shape createRectangle() {
        // some advanced logic to create a rectangle
        return new Rectangle();
    }

    @Override
    public Shape createCircle() {
        // some advanced logic to create a circle
        return new Circle();
    }
}

现在,我们就可以使用“工厂生成器”来创建指定类型的“图形工厂”。

public class Main {
    public static void main(String[] args) {
        ShapeFactory simpleFactory = FactoryGenerator.createFactory(true);
        Shape rectangle = simpleFactory.createRectangle();
        rectangle.draw();

        ShapeFactory advancedFactory = FactoryGenerator.createFactory(false);
        Shape circle = advancedFactory.createCircle();
        circle.draw();
    }
}

输出:

Inside Rectangle::draw() method.
Inside Circle::draw() method.

这就是一个简单的 Java 抽象工厂模式实例。

Ⅱ. 使用场景

一个对象族(或是一组没有任何关系的对象)都有相同的约束。涉及不同操作系统的时候,都可以考虑使用抽象工厂模式

三. ? 学习总结?

本文分享了23种设计模式之一的工厂方法模式(含抽象),小伙伴们一起干起来叭!!!

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。