1 1、简单模式 2 //所有车的接口 有一个共同改的方法 开车 3 public interface Car { 4 public void drive(); 5 } 6 //奥迪类 实现car接口因为奥迪车也是车 肯定可以开的嘛 7 public class Audi implements Car { 8 public Audi(){ 9 System.out.PRintln("生产出一辆奥迪"); 10 } 11 @Override 12 public void drive() { 13 System.out.println("开奥迪"); 14 } 15 } 16 //宝马类 实现car接口因为宝马车也是车 肯定也可以开 17 public class Bmw implements Car{ 18 public Bmw(){ 19 System.out.println("生产出一辆宝马"); 20 } 21 @Override 22 public void drive() { 23 System.out.println("开宝马"); 24 } 25 } 26 //生产车的工厂 该工厂接收一个车名 你只需要告诉他你要生产什么车 就可以生产出对应的车出来 27 public class CarFactory { 28 public static Car getCar(String caename){ 29 if(caename.equals("audi")){ 30 return new Audi(); 31 }else if(caename.equals("bmw")){ 32 return new Bmw(); 33 } 34 return null; 35 } 36 } 37 //测试 38 public class Test { 39 public static void main(String[] args) { 40 //告诉工厂类 你需要生产出一辆奥迪车 那么给昂他传一个参数audi进去 41 Car audi = CarFactory.getCar("audi"); 42 //就可以生产出奥迪的车 调用开车的方法就可以开车啦 43 audi.drive(); 44 //宝马类似 45 Car bmw = CarFactory.getCar("bmw"); 46 bmw.drive(); 47 } 48 } 49 输出: 50 成产出一辆奥迪 51 开奥迪 52 生产出一辆宝马 53 开宝马 54 /** 55 *2、工厂方法模式 56 *根据以上代码 大家可以发现 比传统的new方法 Audi audi = new Audi();要方便很多 如果说你因为需求 要加一个奔驰的车 那你还要Bnez benz = new Bnez(); 这样的**话岂不是很麻烦,用工厂模式的话 客户端就不用在new对象 将生成对象的细节可代码都交给了工厂管理和实现 你只需要写一个getObject();方法获取到你想要的对象就ok了 *囚你要加一辆奔驰的话 只需要写一个benz的类 实现car接口 然后在工厂类中进行添加相应的逻辑代码就好了 57 *这种模式虽然好一些 但是囚我们每次要加一个汽车类的话,都要在工厂类里面修改判断逻辑代码,还是有一定的局限性,不符合开闭原则,因此我们下面介绍更好一点的方式*:工厂方法模式 58 */ 59 //首先我们将carFactory工厂类 抽象成一个接口 60 public interface CarFactory { 61 public Car getCar(); 62 } 63 //然后我们再写两个首先该接口的具体工厂类(奥迪和宝马) 64 public class AudiFactory implements CarFactory { 65 @Override 66 public Car getCar() { 67 return new Audi(); 68 } 69 } 70 public class BmwFactory implements CarFactory { 71 @Override 72 public Car getCar() { 73 return new Bmw(); 74 } 75 } 76 //测试 77 public class Test { 78 public static void main(String[] args) { 79 //实例化奥迪工厂类 80 CarFactory factory = new AudiFactory(); 81 //调用奥迪工厂类里面的生产奥迪的方法 82 Car audi = factory.getCar(); 83 audi.drive(); 84 //宝马和奥迪一样 85 CarFactory factory2 = new BmwFactory(); 86 Car bmw = factory2.getCar(); 87 bmw.drive(); 88 } 89 } 90 输出结果: 91 生产出一辆奥迪 92 开奥迪 93 生产出一辆宝马 94 开宝马 95 //这样的话 奥迪工厂类 就只专注生产奥迪的车 宝马一样只生产宝马车,如果我们需要加奔驰的话 只需要再写一个上产奔驰的工厂类去实现CarFactory接口 和一个奔驰实///体类实现car接口就好了代码如下: 96 public class Bnez implements Car{ 97 98 public Bnez() { 99 System.out.println("生产出一辆奔驰");100 }101 @Override102 public void drive() {103 System.out.println("开奔驰");104 }105 }106 public class BnezFactory implements CarFactory{107 @Override108 public Car getCar() {109 return null;110 }111 }112 //在Test里面调用:113 CarFactory factory = new BenzFactory();114 Car benz = factory.getCar();115 benz.drive();116 /**117 *3、抽象工厂模式118 *但是大家又会觉得 奥迪和宝马也不止一种车啊 也有奥迪跑车 和奥迪越野车, 宝马跑车和宝马越野车啊 的确这样 那么以上两种方就实现不了 因为car这个接口就不能通*用了,他只能生产car,不能生产出跑车和越野车,所以第三种方法 我们需要将car这个接口里面的getCar()方法变成两个方法(一个上产跑车的方法getPaoche();一个生产越*野车的方法getYueye()) 所以引进第三种工厂模式:抽象工厂模式119 */120 //跑车接口121 public interface Paoche {122 public void drive();123 }124 //越野车接口125 public interface Yueye {126 public void drive();127 }128 //那么这样的话奥迪车是不是就变成了两个实体类了 之前只是一个audi这个类 现在变成了 奥迪跑车类和奥迪越野车类 加上宝马的话就有四个具体实现的类了129 //奥迪跑车130 public class Audipaoche implements Paoche {131 public AudiPaoche(){132 System.out.println("奥迪工厂上产出一辆奥迪跑车");133 }134 public void drive() {135 System.out.println("奥迪跑车在路上跑");136 }137 }138 //奥迪越野车139 public class AudiYueye implements Yueye {140 public AudiYueye(){141 System.out.println("奥迪工厂生产出一辆奥迪越野车");142 }143 public void drive() {144 System.out.println("奥迪越野车在路上跑");145 }146 }147 //宝马跑车148 public class BmwPaoche implements Paoche{149 public BmwPaoche(){150 System.out.println("宝马工厂生产出一辆宝马跑车");151 }152 public void drive() {153 System.out.println("宝马跑车在路上跑");154 }155 }156 //宝马越野车157 public class BmwYueye implements Yueye {158 public BmwYueye(){159 System.out.println("宝马工厂生产出一辆宝马越野车");160 }161 public void drive() {162 System.out.println("宝马越野车");163 }164 }165 //生产跑车和越野车的接口166 public interface CarFactory {167 public Paoche getPaoche();168 public Yueye getYueye();169 }170 //生产奥迪的工厂类实现CarFactory171 public class AudiFactory implements CarFactory{172 @Override173 public Paoche getPaoche() {174 return new AudiPaoche();175 }176 @Override177 public Yueye getYueye() {178 return new AudiYueye();179 }180 }181 //生产宝马的工厂类实现CarFactory182 public class BmwFactory implements CarFactory {183 @Override184 public Paoche getPaoche() {185 return new BmwPaoche();186 }187 @Override188 public Yueye getYueye() {189 return new BmwYueye();190 }191 }192 //测试193 public class Test {194 public static void main(String[] args) {195 //实例化生产宝马的工厂类 来上产宝马跑车和宝马越野车 宝马工厂有 生产宝马跑车和宝马越野车 这两个方法 具体是生产跑车还是越野车 看客户端选择196 CarFactory factory = new BmwFactory();197 //在这里选择的是生产跑车 调用的是上产跑车的方法198 Paoche paoche = factory.getPaoche();199 paoche.drive();200 201 CarFactory factory2 = new AudiFactory();202 Yueye yueye = factory2.getYueye();203 yueye.drive();204 }205 }206 输出结果:207 宝马工厂生产出一辆宝马跑车208 宝马跑车在路上跑209 奥迪工厂生产出一辆奥迪越野车210 奥迪越野车在路上跑211 //写了这么多 希望对大家有所帮助吧
新闻热点
疑难解答