工厂模式及其在 Java 中的实现124
简介
工厂模式是一种创建型设计模式,它为创建对象提供了一种抽象接口。通过使用工厂,客户端代码可以通过提供所需类型的名称来创建对象,而无需指定创建它的具体类。
工厂方法模式
工厂方法模式是工厂模式最基本的形式。它涉及定义一个能够创建产品对象的工厂接口。每个具体工厂实现都创建一个特定类型的产品对象。
interface Product {
void doSomething();
}
class ConcreteProductA implements Product {
@Override
public void doSomething() {
("ConcreteProductA: doSomething()");
}
}
class ConcreteProductB implements Product {
@Override
public void doSomething() {
("ConcreteProductB: doSomething()");
}
}
interface Creator {
Product factoryMethod();
}
class ConcreteCreatorA implements Creator {
@Override
public Product factoryMethod() {
return new ConcreteProductA();
}
}
class ConcreteCreatorB implements Creator {
@Override
public Product factoryMethod() {
return new ConcreteProductB();
}
}
public class FactoryMethodPattern {
public static void main(String[] args) {
Creator creator1 = new ConcreteCreatorA();
Product product1 = ();
();
Creator creator2 = new ConcreteCreatorB();
Product product2 = ();
();
}
}
简单工厂模式
简单工厂模式是一种工厂模式,它提供了一个单一的工厂类负责创建所有类型的产品对象。它使用对象的类型名称作为创建特定产品对象的密钥。
public class SimpleFactoryPattern {
public static Product createProduct(String type) {
switch (type) {
case "A":
return new ConcreteProductA();
case "B":
return new ConcreteProductB();
default:
throw new IllegalArgumentException("Invalid product type");
}
}
public static void main(String[] args) {
Product product1 = ("A");
();
Product product2 = ("B");
();
}
}
抽象工厂模式
抽象工厂模式涉及一个更高级别的工厂接口,它可以创建一系列相关或依赖的对象。它允许客户端代码通过提供所需的工厂类型名称来创建多个对象,这些对象都来自同一个产品系列。
interface AbstractFactory {
ProductA createProductA();
ProductB createProductB();
}
class ConcreteFactoryA implements AbstractFactory {
@Override
public ProductA createProductA() {
return new ConcreteProductA1();
}
@Override
public ProductB createProductB() {
return new ConcreteProductB1();
}
}
class ConcreteFactoryB implements AbstractFactory {
@Override
public ProductA createProductA() {
return new ConcreteProductA2();
}
@Override
public ProductB createProductB() {
return new ConcreteProductB2();
}
}
interface ProductA {
void doSomething();
}
class ConcreteProductA1 implements ProductA {
@Override
public void doSomething() {
("ConcreteProductA1: doSomething()");
}
}
class ConcreteProductA2 implements ProductA {
@Override
public void doSomething() {
("ConcreteProductA2: doSomething()");
}
}
interface ProductB {
void doSomething();
}
class ConcreteProductB1 implements ProductB {
@Override
public void do something() {
("ConcreteProductB1: doSomething()");
}
}
class ConcreteProductB2 implements ProductB {
@Override
public void do something() {
("ConcreteProductB2: doSomething()");
}
}
public class AbstractFactoryPattern {
public static void main(String[] args) {
AbstractFactory factory1 = new ConcreteFactoryA();
ProductA productA1 = ();
ProductB productB1 = ();
();
();
AbstractFactory factory2 = new ConcreteFactoryB();
ProductA productA2 = ();
ProductB productB2 = ();
();
();
}
}
工厂模式的优点* 解耦客户端代码和具体产品类:客户端代码不再需要知道具体的产品类,这使得它更容易添加或删除产品类。
* 集中控制对象创建:工厂可以集中控制对象创建,这有助于确保对象的正确性和一致性。
* 提高灵活性:工厂模式允许客户端代码在运行时更改创建的产品类型,这增加了灵活性。
工厂模式的缺点* 可能引入过多的抽象:根据工厂模式的复杂程度,可能会引入过多的抽象,从而使代码更难理解。
* 可能损害性能:由于需要额外的间接层,工厂模式可能会损害性能,尤其是在创建大量对象的情况下。
工厂模式是一种强大的设计模式,用于创建对象。通过使用工厂,客户端代码可以解耦与具体产品类的耦合,集中控制对象创建并提高灵活性。
2024-11-14
上一篇:Java 中的桥接方法:深入理解
Java方法栈日志的艺术:从错误定位到性能优化的深度指南
https://www.shuihudhg.cn/133725.html
PHP 获取本机端口的全面指南:实践与技巧
https://www.shuihudhg.cn/133724.html
Python内置函数:从核心原理到高级应用,精通Python编程的基石
https://www.shuihudhg.cn/133723.html
Java Stream转数组:从基础到高级,掌握高性能数据转换的艺术
https://www.shuihudhg.cn/133722.html
深入解析:基于Java数组构建简易ATM机系统,从原理到代码实践
https://www.shuihudhg.cn/133721.html
热门文章
Java中数组赋值的全面指南
https://www.shuihudhg.cn/207.html
JavaScript 与 Java:二者有何异同?
https://www.shuihudhg.cn/6764.html
判断 Java 字符串中是否包含特定子字符串
https://www.shuihudhg.cn/3551.html
Java 字符串的切割:分而治之
https://www.shuihudhg.cn/6220.html
Java 输入代码:全面指南
https://www.shuihudhg.cn/1064.html