抽象工厂模式

来源:互联网 发布:花生壳还有免费域名吗 编辑:程序博客网 时间:2024/06/05 16:03

1.
当每个抽象产品都有多于一个的具体子类的时候(空调有型号A和B两种,发动机也有型号A和B两种),工厂角色怎么知道实例化哪一个子类呢?比如每个抽象产品角色都有两个具体产品(产品空调有两个具体产品空调A和空调B)。抽象工厂模式提供两个具体工厂角色(宝马320系列工厂和宝马230系列工厂),分别对应于这两个具体产品角色,每一个具体工厂角色只负责某一个产品角色的实例化。
每一个具体工厂类只负责创建抽象产品的某一个具体子类的实例。

2.产品类

//发动机以及型号  public interface Engine {  }  public class EngineA extends Engine{      public EngineA(){          System.out.println("制造-->EngineA");      }  }  public class EngineBextends Engine{      public EngineB(){          System.out.println("制造-->EngineB");      }  }  //空调以及型号  public interface Aircondition {  }  public class AirconditionA extends Aircondition{      public AirconditionA(){          System.out.println("制造-->AirconditionA");      }  }  public class AirconditionB extends Aircondition{      public AirconditionB(){          System.out.println("制造-->AirconditionB");      }  } 

创建工厂类:

//创建工厂的接口  public interface AbstractFactory {      //制造发动机    public Engine createEngine();    //制造空调     public Aircondition createAircondition(); }  //为宝马320系列生产配件  public class FactoryBMW320 implements AbstractFactory{      @Override      public Engine createEngine() {            return new EngineA();      }      @Override      public Aircondition createAircondition() {          return new AirconditionA();      }  }  //宝马523系列public class FactoryBMW523 implements AbstractFactory {       @Override      public Engine createEngine() {            return new EngineB();      }      @Override      public Aircondition createAircondition() {          return new AirconditionB();      }  } 

客户:

public class Customer {      public static void main(String[] args){          //生产宝马320系列配件        FactoryBMW320 factoryBMW320 = new FactoryBMW320();          factoryBMW320.createEngine();        factoryBMW320.createAircondition();        //生产宝马523系列配件          FactoryBMW523 factoryBMW523 = new FactoryBMW523();          factoryBMW320.createEngine();        factoryBMW320.createAircondition();    }  }

无论是简单工厂模式,工厂方法模式,还是抽象工厂模式,他们都属于工厂模式,在形式和特点上也是极为相似的,他们的最终目的都是为了解耦

原创粉丝点击