java设计模式之一工厂模式
简单工厂模式是java设计模式中最简单的设计模式之一:
工厂模式是最常用的设计模式之一。 工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=new A() 工厂模式也是用来创建实例对象的,所以以后new时就要多个心眼,是否可以考虑使用工厂模式,虽然这样做,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量。
工厂模式主要一般有简单工厂模式,多个工厂模式,静态工厂模式。
首先看简单工厂模式:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 package com.qcf.test; 2 /** 3 * 普通工厂模式 4 * 工厂模式主要是统一提供对象的引用 5 * @author Computer 6 * 7 */ 8 public class Factory { 9 public static void main(String[] args) { 10 CarFactory carFactory=new CarFactory(); 11 Car car =carFactory.getCar("BmwCar"); 12 car.getName(); 13 } 14 } 15 /** 16 * 工厂生产类 17 * @author Computer 18 * 19 */ 20 class CarFactory{ 21 public static Car getCar(String type_car){ 22 if("BmwCar".equals(type_car)){ 23 return new Bmw(); 24 }else if("BigCar".equals(type_car)){ 25 return new BigCar(); 26 }else{ 27 System.out.println("请输入正确的汽车类型"); 28 return null; 29 } 30 } 31 32 } 33 /** 34 * 接口 35 * @author Computer 36 * 37 */ 38 interface Car{ 39 void getName(); 40 } 41 /** 42 * 实现接口的子类 43 * @author Computer 44 * 45 */ 46 class Bmw implements Car{ 47 @Override 48 public void getName() { 49 System.out.println("BMW Car...."); 50 } 51 } 52 /** 53 * 实现接口的子类 54 * @author Computer 55 * 56 */ 57 class BigCar implements Car{ 58 @Override 59 public void getName() { 60 System.out.println("Big Car..."); 61 } 62 }
多个工厂模式就是修改CarFactory如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 public class Factory { 2 public static void main(String[] args) { 3 CarFactory carFactory=new CarFactory(); 4 Car car =carFactory.productBmwCar(); 5 car.getName(); 6 } 7 } 8 /** 9 * 工厂生产类 10 * @author Computer 11 * 12 */ 13 class CarFactory{ 14 public Car productBmwCar(){ 15 return new Bmw(); 16 } 17 public Car productBigCar(){ 18 return new BigCar(); 19 } 20 }
静态工厂模式就是把CarFactory的方法加上static改成静态的,这样不能创建CarFactory的实例就可以生产Car了
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 public class Factory { 2 public static void main(String[] args) { 3 Car car =CarFactory.productBmwCar(); 4 car.getName(); 5 } 6 } 7 /** 8 * 工厂生产类 9 * @author Computer 10 * 11 */ 12 class CarFactory{ 13 public static Car productBmwCar(){ 14 return new Bmw(); 15 } 16 public static Car productBigCar(){ 17 return new BigCar(); 18 } 19 }