?本文收录于 《聊设计模式》 专栏,专门攻坚指数级提升,助你一臂之力,早日登顶?,欢迎持续关注&&收藏&&订阅!
??设计模式是指在软件设计中,经过总结和提炼的,能够解决特定问题的经验性的总结。它不是一种可直接转化为代码的完整设计,而是一种描述在不同情况下如何解决问题的一种方案。
??工厂方法模式(Factory Method
)是一种创建型设计模式,它提供了一种创建对象的最佳方式。在工厂方法模式中,我们不会指定要创建哪个类的对象,而是由子类决定要创建哪个类的对象。这样我们就可以将对象的创建从代码中解耦,使得代码更加灵活。
??本文将围绕工厂方法模式展开,介绍它的定义、结构、实现、优缺点及适用场景。此外,本文还提供了Java代码实现和测试用例,帮助读者更好地理解工厂方法模式。
??本文将介绍工厂方法模式的定义、结构、实现、优缺点及适用场景。其中,定义部分阐述了什么是工厂方法模式,结构部分介绍了工厂方法模式的UML图和各个角色的职责,实现部分提供了Java代码实现,优缺点部分分析了工厂方法模式的优劣,适用场景部分列出了适用于工厂方法模式的情景。此外,本文还提供了测试用例以验证工厂方法模式的正确性。
??工厂方法模式定义:定义一个用于创建对象的接口,让子类决定将哪一个类实例化。工厂方法模式使一个类的实例化延迟到其子类。
??工厂方法模式通过定义一个抽象的工厂接口来声明创建产品对象的操作,而将实际创建工作推迟到子类中进行。这样做的好处是,我们可以针对不同的产品需求,提供一个统一的接口,而使用者只需要关心接口,而不需要关心具体的实现细节。在需要新增产品时,只需要添加一个新的产品类和相应的工厂类即可。
工厂方法模式包含以下角色:
Concrete Creator
):实现Creator接口中的创建产品方法,返回具体的产品实例。Product
):定义一个产品的抽象类,它包含了一些基本的属性和方法,这些方法或属性将会被具体的产品类所实现和覆盖。Concrete Product
):实现抽象产品接口中定义的方法和属性。如下是工厂方法模式的UML类图:
工厂方法模式有以下优点:
工厂方法模式也有以下缺点:
工厂方法模式适用于以下场景:
以下是工厂方法模式的Java代码实现。
package com.example.javaDesignPattern.factoryMethod;
/**
* 抽象工厂
*
* @author bug菌
* @version 1.0
* @date 2023/9/18 16:45
*/
public interface Creator {
Product createProduct();
}
package com.example.javaDesignPattern.factoryMethod;
/**
* 具体工厂
*
* @author bug菌
* @version 1.0
* @date 2023/9/18 16:46
*/
public class ConcreteCreator implements Creator {
@Override
public Product createProduct() {
return new ConcreteProduct();
}
}
package com.example.javaDesignPattern.factoryMethod;
/**
* 抽象产品
*
* @author bug菌
* @version 1.0
* @date 2023/9/18 16:50
*/
public interface Product {
void doSomething();
}
package com.example.javaDesignPattern.factoryMethod;
/**
* 具体产品
*
* @author bug菌
* @version 1.0
* @date 2023/9/18 16:51
*/
public class ConcreteProduct implements Product {
@Override
public void doSomething() {
System.out.println("具体产品做了某些事情");
}
}
package com.example.javaDesignPattern.factoryMethod;
/**
* 测试用例
*
* @author bug菌
* @version 1.0
* @date 2023/9/18 16:51
*/
public class Client {
public static void main(String[] args) {
Creator creator = new ConcreteCreator();
Product product = creator.createProduct();
product.doSomething();
}
}
测试用例执行结果如下:
如上是一个简单的工厂模式的示例代码,包括以下几个部分:
Client
):其中包含一个 main
方法,用来演示如何使用工厂模式创建产品并调用其方法。Product
):定义了产品的基本方法。ConcreteProduct
):实现了抽象产品接口中定义的方法。Creator
):定义了工厂方法(createProduct
),用来创建产品实例。ConcreteCreator
):实现了抽象工厂接口中的工厂方法(createProduct
),用来创建具体的产品实例。??在客户端代码中,先创建了一个具体的工厂实例(ConcreteCreator
),然后通过工厂实例的 createProduct
方法来创建一个具体的产品实例(ConcreteProduct
)。最后调用产品实例的 doSomething
方法来执行具体的功能。
??本文介绍了工厂方法模式的概念、实现、优点和应用。在工厂方法模式中,我们通过定义一个工厂接口来实现对象的创建,并且可以将对象创建的细节隐藏起来。通过使用工厂方法模式,我们可以将代码的复杂性降到最低,从而更容易进行扩展和维护。
??如上涉及代码均已上传同步在GitHub,提供给同学们参考性学习。
??工厂方法模式是一种非常有用的设计模式,它可以帮助我们解决对象创建的问题,从而提高我们的代码的可维护性和可扩展性。在实际应用中,我们可以通过工厂方法模式来实现各种功能,例如对象的创建、事件的处理等等。因此,掌握工厂方法模式是非常重要的。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。