一、抽象工厂模式说明:
抽象工厂模式更符合我们的日常生活和一般规律,所以,应用更加广泛。下图举例说明了抽象工厂模式:
二、抽象工厂模式设计:
根据上图的描述,抽象工厂模式可以设计如下:
package com.solid.abstractfactory;
/**
* 抽象工厂模式(产品接口一)
* @author solid
*
*/
public interface Fruit {
}
package com.solid.abstractfactory;
/**
* 抽象工厂模式(产品A1)
* @author solid
*
*/
public class NorthFruit implements Fruit {
private String name;
public NorthFruit(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package com.solid.abstractfactory;
/**
* 抽象工厂模式(产品A2)
* @author solid
*
*/
public class SouthFruit implements Fruit {
private String name;
public SouthFruit(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package com.solid.abstractfactory;
/**
* 抽象工厂模式(产品接口二)
* @author solid
*
*/
public interface Vegetable {
}
package com.solid.abstractfactory;
/**
* 抽象工厂模式(产品B1)
* @author solid
*
*/
public class NorthVegetable implements Vegetable {
private String name;
public NorthVegetable(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package com.solid.abstractfactory;
/**
* 抽象工厂模式(产品B2)
* @author solid
*
*/
public class SouthVegetable implements Vegetable {
private String name;
public SouthVegetable(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package com.solid.abstractfactory;
/**
* 抽象工厂模式(工厂接口)
* @author solid
*
*/
public interface Factory {
//获取水果
Fruit getFruit(String name);
//获取蔬菜
Vegetable getVegetable(String name);
}
package com.solid.abstractfactory;
/**
* 抽象工厂模式(北方工厂)
* @author solid
*
*/
public class NorthFactory implements Factory {
//单例模式
private static Factory factory = null;
private NorthFactory() {}
synchronized public static Factory getInstance() {
if(factory == null) {
factory = new NorthFactory();
}
return factory;
}
//获取北方水果
public Fruit getFruit(String name) {
return new NorthFruit(name);
}
//获取北方蔬菜
public Vegetable getVegetable(String name) {
return new NorthVegetable(name);
}
}
package com.solid.abstractfactory;
/**
* 抽象工厂模式(南方工厂)
* @author solid
*
*/
public class SouthFactory implements Factory {
//单例模式
private static Factory factory = null;
private SouthFactory() {}
public static Factory getInstance() {
if(factory == null) {
factory = new SouthFactory();
}
return factory;
}
//获取南方水果
public Fruit getFruit(String name) {
return new SouthFruit(name);
}
//获取南方蔬菜
public Vegetable getVegetable(String name) {
return null;
}
}