侧边栏壁纸
博主头像
小白不想白 博主等级

行动起来,活在当下

  • 累计撰写 16 篇文章
  • 累计创建 5 个标签
  • 累计收到 2 条评论

目 录CONTENT

文章目录

设计模式之工厂方法模式

小白不想白
2024-12-18 / 0 评论 / 0 点赞 / 3 阅读 / 0 字
温馨提示:
本文最后更新于2024-12-18,若内容或图片失效,请留言反馈。 部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

定义

定义一个用于创建对象的接口,让其子类决定实例化哪一个类,Factory Method使得一个类的实例化延迟到子类

应用场景

  • 当不知道使用对象的确切类型的时候
  • 当希望为库或框架提供其内部组件的方法时

主要优点

  • 将具体实例和创建者解耦
  • 符合单一职责原则
  • 符合开闭原则

实现方式

在工厂方法模式中,抽象工厂和抽象产品是核心,而具体工厂和具体产品则根据实际需求进行扩展和实现。
通过这些角色的协作,工厂方法模式实现了将产品的创建过程封装起来,使得客户端与具体产品解耦,同时也提供了灵活性和可扩展性。

1、抽象产品类和具体产品类

首先定义一个抽象产品类 Product

public abstract class Product {
    public abstract void use();

	// 所有子类都可公共的方法
	public void test(){  
	    System.out.println("test");  
	}
}

然后创建具体产品类,如 ConcreteProductAConcreteProductB,它们分别继承自 Product 并实现了其中的抽象方法。

public class ConcreteProductA  extends Product {
    @Override
    public void use(){
       System.out.println("use ConcreteProductA");  
    }
}
public class ConcreteProductB  extends Product {
    @Override
    public void use(){
        System.out.println("use ConcreteProductB");   
    }
}

2、抽象工厂类和具体工厂类

接下来定义一个抽象工厂类 Factory,其中包含一个抽象的工厂方法 createProduct(),用于创建具体的产品对象

public abstract class Factory {
    public abstract Product createProduct();
}

对于每个具体产品,创建相应的具体工厂类:

public class ConcreteFactoryA extends Factory {
    @Override
    public Product createProduct() {
        return new ConcreteProductA();
    }
}
public class ConcreteFactoryB extends Factory {   
    @Override
    public Product createProduct() {
        return new ConcreteProductB();
    }
}

3、客户端代码

在客户端代码中,我们可以根据需要选择不同的具体工厂类来创建产品对象。

public class Client {
    public static void main(String[] args) {
        Factory factory = new ConcreteFactoryA();
        Product product = factory.createProduct();
        product.use();
        product.test();
    }
}
0

评论区