设计模式之简单工厂模式

preview
共18个文件
cs:6个
exe:3个
txt:2个
需积分: 0 3 下载量 106 浏览量 更新于2014-04-23 收藏 29KB ZIP 举报
**设计模式之简单工厂模式** 简单工厂模式是软件设计模式中的结构型模式之一,它提供了一种创建对象的最佳方式。在简单工厂模式中,我们定义一个用于创建对象的接口,但让子类决定实例化哪一个类。简单工厂模式使代码创建对象的过程变得更加灵活,同时也隔离了客户端代码与具体产品类的耦合。 **基本概念** 1. **产品接口/抽象类**:这是所有具体产品类的公共父类或接口,定义了产品的公共方法。 2. **具体产品类**:实现了产品接口或继承自产品抽象类的具体类,它们是工厂可以创建的对象。 3. **工厂类**:负责创建产品对象,它知道如何创建所有的具体产品,并且可以根据需求返回相应的产品实例。 **优缺点** **优点** 1. **封装性**:客户端无需知道具体产品类的实现细节,只需要知道产品接口即可。 2. **扩展性**:增加新的产品类时,无需修改已有客户端代码,符合开闭原则。 3. **方便客户端使用**:客户端只需要通过工厂类来获取所需对象,降低了复杂性。 **缺点** 1. **违背了单一职责原则**:工厂类同时负责创建对象和判断创建哪种对象,职责过重。 2. **扩展困难**:如果要新增一个产品类,需要修改工厂类,这违背了开放封闭原则。 3. **不利于测试**:由于工厂类集中了大量的实例化操作,如果这些操作有问题,测试会比较困难。 **应用场景** 简单工厂模式常用于以下场景: 1. 当系统中产品类不多,且不会频繁增加新产品时。 2. 客户端只知道产品的接口,而不需要知道产品的具体类。 3. 需要创建的对象具有共同的接口或基类。 **代码示例** 在这个`SimpleFactory`压缩包中,通常包含以下几个文件: 1. `Product`接口或抽象类:定义产品的行为。 2. `ConcreteProduct1`, `ConcreteProduct2`等:具体产品类,实现`Product`接口或继承自抽象类。 3. `SimpleFactory`类:工厂类,根据条件创建不同的产品实例。 例如: ```java // Product 接口 public interface Product { void operate(); } // ConcreteProduct1 类 public class ConcreteProduct1 implements Product { @Override public void operate() { System.out.println("ConcreteProduct1 is operating."); } } // ConcreteProduct2 类 public class ConcreteProduct2 implements Product { @Override public void operate() { System.out.println("ConcreteProduct2 is operating."); } } // SimpleFactory 类 public class SimpleFactory { public static Product createProduct(String type) { if ("type1".equals(type)) { return new ConcreteProduct1(); } else if ("type2".equals(type)) { return new ConcreteProduct2(); } else { throw new IllegalArgumentException("Invalid product type"); } } } ``` 客户端使用: ```java public class Client { public static void main(String[] args) { Product product1 = SimpleFactory.createProduct("type1"); product1.operate(); Product product2 = SimpleFactory.createProduct("type2"); product2.operate(); } } ``` 以上就是简单工厂模式的基本介绍及其在实际应用中的作用。通过这个模式,我们可以更好地管理和控制对象的创建,提高代码的可维护性和可扩展性。