工厂模式
分为3种:简单工厂模式、工厂方法模式、抽象工厂模式
- 简单工厂:能简单就简单,在允许的情况下尽可能的简单,但当有复杂的多层次等级结构时,所有的业务逻辑都在这个工厂类中判断实现,一旦这个工厂不能正常工作,整个系统都会受到影响
1 public class A { 2 public static void main(String[] args) { 3 Factory factory = newFactory(); 4 System.out.println(factory.productString("蔬菜")); 5 System.out.println(factory.productString("米饭")); 6 System.out.println(factory.productInteger("一")); 7 System.out.println(factory.productInteger("五")); 8 } 9 } 10 11 public class Factory { 12 public String productString(String inputStr) { 13 if (inputStr.equals("水果")) 14 return "生产的水果"; 15 if (inputStr.equals("蔬菜")) 16 return "生产的蔬菜"; 17 return "请输入正确需求"; 18 } 19 20 public Integer productInteger(String inputStr) { 21 if (inputStr.equals("一")) 22 return 1; 23 if (inputStr.equals("二")) 24 return 2; 25 return 0; 26 } 27 } 28
- 工厂方法模式:定义一个工厂接口,不同的工厂继承这个接口创建不同的产品
1 //抽象产品类 2 abstract class Product{ 3 public abstract void show(); 4 } 5 //A产品 6 class ProductA extends Product{ 7 public void show(){ 8 System.out.println("这是A产品"); 9 } 10 } 11 //B产品 12 class ProductB extends Product{ 13 public void show(){ 14 System.out.println("这是B产品"); 15 } 16 } 17 //抽象工厂类 18 abstract class Factory{ 19 public abstract Product manuPro(); 20 } 21 //A工厂 22 class FactoryA extends Factory{ 23 public Product manuPro(){ 24 return new ProductA(); 25 } 26 } 27 //B工厂 28 class FactoryB extends Factory{ 29 public Product manuPro(){ 30 return new ProductB(); 31 } 32 } 33 34 //主类 35 public class Main{
public static void main(String[] args) { 36 //A工厂生产A产品 37 FactoryA factoryA=new FactoryA(); 38 Product product=factoryA.manuPro(); 39 product.show();//"这是A产品" 40 //B工厂生产B产品 41 FactoryB factoryB=new FactoryB(); 42 product=factoryB.manuPro(); 43 product.show();//"这是B产品"
} 44 }
- 抽象工厂模式:工厂方法模式侧重于同属性产品,而抽象工厂模式侧重于产品族不同属性的产品
类结构如下图:

1 //空调 2 public interface AirConditioner { 3 void msg(); 4 } 5 //风扇 6 public interface Fan { 7 void msg(); 8 } 9 //冰箱 10 public interface Fridge { 11 void msg(); 12 } 13 14 //创建3个美的产品类 15 public class MediaAirConditioner implements AirConditioner { 16 public void msg() { 17 System.out.println("美的空调"); 18 } 19 } 20 public class MediaFan implements Fan { 21 public void msg() { 22 System.out.println("美的风扇"); 23 } 24 } 25 public class MediaFridge implements Fridge{ 26 public void msg() { 27 System.out.println("美的冰箱"); 28 } 29 } 30 31 //工厂抽象类 32 public interface Factory { 33 Fridge createFridge(); 34 AirConditioner createAirConditioner(); 35 Fan createFan(); 36 } 37 38 //美的工厂类 39 public class MediaFactory implements Factory{ 40 public Fridge createFridge() { 41 return new MediaFridge(); 42 } 43 public AirConditioner createAirConditioner() { 44 return new MediaAirConditioner(); 45 } 46 public Fan createFan() { 47 return new MediaFan(); 48 } 49 } 50 51 //创建3个海尔产品类 52 public class haierAirConditioner implements AirConditioner { 53 public void msg() { 54 System.out.println("海尔空调"); 55 } 56 } 57 public class haierFan implements Fan { 58 public void msg() { 59 System.out.println("海尔风扇"); 60 } 61 } 62 public class haierFridge implements Fridge{ 63 public void msg() { 64 System.out.println("海尔冰箱"); 65 } 66 } 67 //海尔工厂类 68 public class HaierFactory implements Factory{ 69 public Fridge createFridge() { 70 return new haierFridge(); 71 } 72 public AirConditioner createAirConditioner() { 73 return new haierAirConditioner(); 74 } 75 public Fan createFan() { 76 return new haierFan(); 77 } 78 } 79 80 81 //主类 82 public class Main{
public static void main(String[] args) { 83 //美的工厂类负责生产美的空调、风扇、冰箱 84 Factory mediaFactory=new MediaFactory(); 85 AirConditioner mediaAirConditioner=mediaFactory.createAirConditioner(); 86 mediaAirConditioner.msg();//美的空调 87 Fan mediaFan=mediaFactory. createFan(); 88 mediaFan.msg();//美的风扇 89 Fridge mediaFridge=mediaFactory. createFridge(); 90 mediaFridge.msg();//美的冰箱 91
92 //海尔工厂类负责生产海尔空调、风扇、冰箱 93 Factory haierFactory=new HaierFactory(); 94 AirConditioner haierAirConditioner=haierFactory.createAirConditioner(); 95 haierAirConditioner.msg();//海尔空调 96 Fan haierFan=haierFactory.createFan(); 97 haierFan.msg();//海尔风扇 98 Fridge haierFridge=haierFactory.createFridge(); 99 haierFridge.msg();//海尔冰箱
} 100 }

浙公网安备 33010602011771号