设计模式学习工厂三兄弟之工厂模式总结

263 阅读2分钟

工厂模式的定义:

定义一个用于创建对象的接口,让子类决定将哪一个类实例化。工厂方法模式让一个类的实例化延迟到其子类。工厂方法模式又简称为工厂模式(Factory Pattern),又可称作虚拟构造器模式(Virtual Constructor Pattern)或多态工厂模式(Polymorphic Factory Pattern)。

工厂模式的优点:

  1. 工厂角色和产品角色的多态性。
  2. 在加入新的产品时,无需修改原有的抽象工厂和抽象产品提供的接口,只要添加一个具体的工厂和具体产品。系统扩展性好,符合开闭原则。

工厂模式的缺点:

  1. 增加新产品时要添加具体的产品类和工厂类。增加系统复杂度。
  2. 需要增加抽象层,增加系统理解难度。

工厂模式的适用场景:

  1. 客户端不知道它所需要的对象的类。在工厂方法模式中,客户端不需要知道具体产品类的类名,只需要知道所对应的工厂即可,具体的产品对象由具体工厂类创建,可将具体工厂类的类名存储在配置文件或数据库中。
  2. 抽象工厂类通过其子类来指定创建哪个对象。在工厂方法模式中,对于抽象工厂类只需要提供一个创建产品的接口,而由其子类来确定具体要创建的对象,利用面向对象的多态性和里氏代换原则,在程序运行时,子类对象将覆盖父类对象,从而使得系统更容易扩展。

练习

  interface Image(){
      public void readImage();
  }

  class JpgImage implements Image(){
      public void readImage(){
          System.out.println("读取jpg图片");
      }
  }

  class GifImage implements Image(){
      public void readImage(){
          System.out.println("读取gif图片");
      }
  }

  interface ImageFactory(){
      public Image create();
  }

  calss JpgFactory implements ImageFactory(){
      public Image create(){
          JpgImage jpg = new JpgIMage();
          return jpg;
      }
  }

  class GifFactory implements GifFactory(){
      public Image create(){
          GifImage gif = new GifImage();
          return gif;

      }
  }


  //测试代码
  Image image;
  Factory factory;
  factory = new JpgFactory();
  image = factory.create();
  image.readImage();