chapter04_工厂模式

  • __工厂__处理创建对象的细节

  • 通过静态方法创建对象叫做__静态工厂__

    静态工厂的优点是不需要创建工厂对象实例

    缺点是__不能通过继承的方式改变创建方法的行为__

  • 简单工厂不是一种设计模式, 而是一种编程习惯

    示例

      public class SimplePizzaFactory {
    
          public Pizza createPizza(String type) {
      
              Pizza pizza = null;
    
              if (type.equals("cheese")) {
                  pizza = new CheesePizza();
              } else if (type.equals("pepperoni")) {
                  pizza = new PepperoniPizza();
              } else if (type.equals("clam")) {
                  pizza = new ClamPizza();
              } else if (type.equals("veggie")) {
                  pizza = new VeggiePizza();
              }
    
              return pizza;
          }
      }
    
  • 工厂方法

    (1) 简单工厂中用一个对象负责所有具体类的实例化, 工厂方法是在基类中定义一个抽象方法用于创建实例对象, 在派生类中实现这个方法. 这个方法的返回值是一个具体的产品.

    (2) 工厂方法模式通过让子类决定该创建的对象是什么, 来达到将对象创建的过程封装的目的

    (3) 工厂方法通常需要一个产品接口(抽象类), 一个创建者接口(抽象类), 这两个类是平级的

    (4) 定义

    定义了一个创建对象的接口, 但是由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类

    (5) 示例

      public abstract class PizzaStore {
    
          abstract Pizza createPizza(String item);
    
          public Pizza orderPizza(String type) {
    
              Pizza pizza = createPizza(type);
    
              System.out.println("--- Making a " + pizza.getName() + " ---");
      
              pizza.prepare();
              pizza.bake();
              pizza.cut();
              pizza.box();
      
              return pizza;
          }
      }
    

    其中, createPizza()就是工厂方法, 具体实现交给派生类完成

  • 工厂的优点是__将创建对象的代码集中在一个对象或方法中, 可以避免代码中的重复, 更方便维护__

  • 设计原则

    要依赖__抽象__, 不要依赖具体类

    具体操作原则

    1° 变量不要持有具体类的引用(可以考虑使用工厂方法避免new的使用)

    2° 不要让类派生自具体类

    3° 不要覆盖基类中已实现的方法, 基类中已实现的方法, 应该由所有的子类共享

  • 抽象工厂

    (1) 抽象工厂提供__一组方法__用于创建__一系列相关产品__的家族

    (2) 抽象工厂中的方法常常以工厂方法的形式实现

  • 工厂方法模式和抽象工厂模式的区别

    (1) 工厂方法使用的是__继承__, 抽象工厂使用的是__对象的组合__

    (2) 当需要创建产品家族或者想让相关产品集合起来的时候, 应该使用抽象工厂; 而工厂方法只会创建一种产品

    一个抽象工厂可以包含很多个工厂方法

猜你喜欢

转载自blog.csdn.net/captxb/article/details/87899903