工厂方法模式

本文详细介绍了工厂方法模式的定义、类图、通用源码及优点,并探讨了该模式的几种特殊应用,包括简单工厂模式、多个工厂方法模式及作为单例模式的替代方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

工厂方法模式定义

Define an interface for creating an object,but let subclasses decide which class to instantite.Factory Method lets a class defer instantation to subclass.

工厂方法模式的一般类图

工厂方法模式的通用源码

1.抽象产品类

?
1
2
3
4
5
6
7
8
package FactoryMethod;
public abstract class Product {
public void method1(){
System.out.println( "这是产品类的业务逻辑处理方法" );
}
public abstract void method2();

2.具体的产品类

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package FactoryMethod;
public class ConcreteProduct1  extends Product {
@Override
public void method2() {
System.out.println( "这是产品一的业务逻辑处理方法" );
}
}
package FactoryMethod;
public class ConcreteProduct2  extends Product {
@Override
public void method2() {
System.out.println( "这是产品二的业务逻辑处理方法" );
}
}

3.抽象工厂类

?
1
2
3
4
5
package FactoryMethod;
public abstract class Creator {
public abstract extends Product> T createProduct(Class  c);
}

4.具体工厂类

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package FactoryMethod;
public class ConcreteCreator  extends Creator {
public extends Product> T createProduct(Class  c) {
Product product =  null ;
try {
product = (Product)Class.forName(c.getName()).newInstance();
catch (Exception e) {
e.printStackTrace();
}
return (T)product;
}
}

5.客户端代码

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package FactoryMethod;
public class Client {
/**
* @author ZhangH
*/
public static void main(String[] args) {
Creator creator =  new ConcreteCreator();
Product product1 = creator.createProduct(ConcreteProduct1. class );
Product product2 = creator.createProduct(ConcreteProduct2. class );
product1.method1();
product1.method2();
System.out.println();
product2.method1();
product2.method2();
}
}


工厂方法模式的优点

优点:

    1. 良好的封装性,降低模块间的耦合;

    2. 面向产品接口,屏蔽产品类。

    3. 典型的解耦框架。高层模块只需要知道产品的抽象类。

    4. 符合迪米特法则、依赖倒置原则、里氏替换原则。

工厂方法模式的特殊应用

  1. 简单工厂模式(静态工厂模式)

    1. 描述:去掉了工厂方法模式中的工厂抽象类,同时把具体工厂方法中的方法设置为静态。

    2. 优点:简化结构、调用过程

    3. 缺点:不利于扩展、不符合开闭原则

  2. 多个工厂方法模式

    1. 描述:对普通工厂方法模式的改进,多个工厂方法模式是提供多个工厂方法,分别创建对象

    2. 优点:创建类的职责清晰,结构简单

    3. 缺点:增加扩展难度(增加协调类,封装子工厂类,对高层提供统一的访问接口)

  3. 替代单例模式

    1. 描述:采用工厂方法模式实现单例模式的功能

    2. 做法:

      1. 私有单例类,不允许new出对象

      2. 在工厂类内,使用反射机制创建一个对象

  4. 延迟初始化

    1. 描述一个对象被消费完毕后,不立刻释放,工厂类保持其,等待再次使用。

    2. 做法:

      1. 在工厂类中以集合的形式容纳所有产生对象

      2. 每次请求创建时,如果集合中已有则直接返回;若没有则创建,放入集合并返回


参考资料:

《设计模式之禅》        秦小波著

《JAVA设计模式》        来自网络
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值