深入浅出设计模式,比head first更易懂,共讲解了22种设计模式: 工厂模式 单例模式 建造模式 原型模式 适配器模式 桥梁模式 组合模式 装饰模式 门面模式 享元模式 代理模式 责任链模式 命令模式 解析器模式 迭代器模式 调停者模式 备忘录模式 观察者模式 策略模式 状态模式 模板模式 访问者模式 ### 深入浅出设计模式之工厂模式详解 #### 引言 设计模式是软件工程领域中一种解决常见问题的通用解决方案。本文主要聚焦于工厂模式,它是一种创建型设计模式,旨在封装实例化过程,使代码更具扩展性和灵活性。 #### 工厂模式概述 工厂模式的核心在于提供了一个创建对象的接口,但将实际创建对象的过程延迟到了子类或具体的工厂类中。这样做的好处是可以简化客户端代码,并使得系统更加容易维护和扩展。 #### 工厂模式的分类 根据《Java与模式》这本书中的分类,工厂模式主要可以分为以下几种: 1. **简单工厂模式(Simple Factory)**:也被称为静态工厂方法模式。这种模式中,工厂类包含一个静态方法来创建产品对象。该模式通常用于减少客户端代码的复杂度。 2. **工厂方法模式(Factory Method)**:这是一种更为灵活的工厂模式,它定义了一个创建产品对象的接口,但让子类决定实例化哪一个类。工厂方法模式让类的实例化延迟到子类中进行。 3. **抽象工厂模式(Abstract Factory)**:此模式提供了一个接口,用于创建一系列相关的或相互依赖的对象,而无需指定它们具体的类。这种模式通常用于构建一组相关的对象。 #### 简单工厂模式详解 简单工厂模式是最基础的一种工厂模式,其结构较为简单,易于理解和实现。 **角色定义:** 1. **工厂类(Factory Class)**:负责创建产品对象。它包含一个静态方法,根据传入的参数决定创建哪个具体的产品类。 2. **抽象产品(Product Interface / Abstract Product)**:通常是所有具体产品类共同遵循的接口或抽象类。 3. **具体产品(Concrete Products)**:工厂类创建的对象实例。它们实现了抽象产品接口或抽象类的方法。 **示例代码:** ```java // 抽象产品角色 public interface Car { public void drive(); } // 具体产品角色 public class Benz implements Car { public void drive() { System.out.println("Driving Benz"); } } public class Bmw implements Car { public void drive() { System.out.println("Driving Bmw"); } } // 工厂类角色 public class Driver { // 工厂方法 public static Car driverCar(String s) throws Exception { if (s.equalsIgnoreCase("Benz")) { return new Benz(); } else if (s.equalsIgnoreCase("Bmw")) { return new Bmw(); } else { throw new Exception("Invalid car type."); } } } // 客户端 public class Magnate { public static void main(String[] args) { try { Car car = Driver.driverCar("benz"); car.drive(); } catch (Exception e) { e.printStackTrace(); } } } ``` **分析:** - 在上述例子中,`Driver` 类作为工厂类,负责根据输入字符串创建相应的 `Car` 对象。 - 客户端 `Magnate` 只需调用工厂类的方法并接收返回的产品对象,不需要关心具体的创建过程。 - 这样做使得客户端与产品的创建解耦,提高了代码的可读性和可维护性。 #### 优缺点分析 **优点:** 1. **封装性**:隐藏了对象创建的细节,使得客户端不需要了解创建逻辑。 2. **扩展性**:可以通过扩展工厂类或添加新的具体产品类来轻松支持新类型的产品。 3. **高内聚低耦合**:将产品对象的创建与使用分离,提高了系统的可扩展性和灵活性。 **缺点:** 1. **违反开闭原则**:简单工厂模式中,每当新增一种产品时都需要修改工厂类,这违反了开闭原则(对扩展开放,对修改关闭)。 2. **工厂类过于臃肿**:随着产品种类的增多,工厂类会变得越来越庞大,难以管理和维护。 #### 总结 工厂模式是一种非常实用的设计模式,特别是在需要动态创建对象的情况下。简单工厂模式作为最基础的形态,提供了简单易用的接口来创建产品对象,但同时也存在一些局限性。为了更好地满足开闭原则,我们可以考虑使用工厂方法模式或抽象工厂模式等更高级的形式。
剩余92页未读,继续阅读
- 粉丝: 0
- 资源: 6
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助