工厂设计模式

来源:互联网 发布:淘宝会员抓取系统 编辑:程序博客网 时间:2024/06/06 20:13

今天学习了工厂设计模式,在此做个总结,以便今后查阅。

1.工厂设计模式的目的:提供了创建对象的过渡接口,将对象的创建隐藏起来

2.工厂模式分为三种:

1)简单工厂模式:多个产品类,一个工厂类,工厂类根据传入的参数的不同返回不同的产品类

产品类:

class BMW{public BMW(){}}class BMW320 extends BMW{public BMW320(){System.out.println("creat BMW320");}}class BMW520 extends BMW{public BMW520(){System.out.println("creat BMW520");}}

工厂类:

class BMWFactory{public BMW creatBMW(int type){switch(type){case 320:return new BMW320();break;case 520:return new BMW520();break;default:break;}return null;}}
客户类:

public class lpq{public static void main(String[] args){BMWFactory bmwFactory=new BMWFactory();//实例化工厂类BMW bmw320=bmwFactory.creatBMW(320);BMW bmw520=bmwFactory.creatBMW(520);}}

从“开闭原则”(对扩展开放,对修改封闭)来看,每增加一种新的产品时,都需要修改工厂类,违背了开闭原则

2)工厂方法模式:多个产品类,多个工厂类,每个工厂类对应一个产品类

产品类:

class BMW{public BMW(){}}class BMW320 extends BMW{public BMW320(){System.out.println("creat BMW320");}}class BMW520 extends BMW{public BMW520(){System.out.println("creat BMW520");}}
工厂类:

class Factory{public Factory(){System.out.println("工厂类的公共实现部分");}}class BMW320Factory extends Factory{public BMW creatBMW320(){return new BMW320();}}class BMW520Factory extends Factory{public BMW creatBMW520(){return new BMW520();}}

客户类:

public class lpq{public static void main(String[] args){BMW320Factory bmw320factory=new BMW320Factory();//实例化工厂类1BMW bmw320=bmw320factory.creatBMW320();BMW520Factory bmw520factory=new BMW520Factory();//实例化工厂类2}


3)抽象工厂模式:

//抽象产品(Bmw和Audi同理)

abstract class BenzCar{      private String name;            public abstract void drive();            public String getName() {          return name;      }      public void setName(String name) {          this.name = name;      }  }  //具体产品(Bmw和Audi同理)  class BenzSportCar extends BenzCar{      public void drive(){          System.out.println(this.getName()+"----BenzSportCar-----------------------");      }  }  class BenzBusinessCar extends BenzCar{      public void drive(){          System.out.println(this.getName()+"----BenzBusinessCar-----------------------");      }  }    abstract class BmwCar{      private String name;            public abstract void drive();            public String getName() {          return name;      }      public void setName(String name) {          this.name = name;      }  }  class BmwSportCar extends BmwCar{      public void drive(){          System.out.println(this.getName()+"----BmwSportCar-----------------------");      }  }  class BmwBusinessCar extends BmwCar{      public void drive(){          System.out.println(this.getName()+"----BmwBusinessCar-----------------------");      }  }    abstract class AudiCar{      private String name;            public abstract void drive();            public String getName() {          return name;      }      public void setName(String name) {          this.name = name;      }  }  class AudiSportCar extends AudiCar{      public void drive(){          System.out.println(this.getName()+"----AudiSportCar-----------------------");      }  }  class AudiBusinessCar extends AudiCar{      public void drive(){          System.out.println(this.getName()+"----AudiBusinessCar-----------------------");      }  }      //抽象工厂  abstract class Driver3{      public abstract BenzCar createBenzCar(String car) throws Exception;            public abstract BmwCar createBmwCar(String car) throws Exception;            public abstract AudiCar createAudiCar(String car) throws Exception;  }  //具体工厂  class SportDriver extends Driver3{      public BenzCar createBenzCar(String car) throws Exception {          return new BenzSportCar();      }      public BmwCar createBmwCar(String car) throws Exception {          return new BmwSportCar();      }      public AudiCar createAudiCar(String car) throws Exception {          return new AudiSportCar();      }  }  class BusinessDriver extends Driver3{      public BenzCar createBenzCar(String car) throws Exception {          return new BenzBusinessCar();      }      public BmwCar createBmwCar(String car) throws Exception {          return new BmwBusinessCar();      }      public AudiCar createAudiCar(String car) throws Exception {          return new AudiBusinessCar();      }  }    //老板  public class BossAbstractFactory {        public static void main(String[] args) throws Exception {                    Driver3 d = new BusinessDriver();          AudiCar car = d.createAudiCar("");          car.drive();      }  }  

                                             
0 0
原创粉丝点击