1 普通工厂模式
提供一个创建对象实例的功能,而无需关心其具体实现.被创建的实例类型可以是接口,抽象类也可以时具体的类.
产品接口类
public interface IProduct {
void out();
}
产品实现类
public class Product1 implements IProduct {
public void out(){
System.out.println("this is product1...");
}
}
public class Product2 implements IProduct{
@Override
public void out() {
System.out.println("this is product2...");
}
}
public class Product3 implements IProduct{
@Override
public void out() {
System.out.println("this is product3...");
}
}
工厂类
public class ProductFactory {
public static IProduct createProduct(String productNo) {
switch (productNo){
case "1":
return new Product1();
case "2":
return new Product2();
case "3":
return new Product3();
default:
throw new RuntimeException("不支持该产品");
}
}
}
测试类
public class ProductFactoryTest {
public static void main(String[] args) {
IProduct product = ProductFactory.createProduct("2");
product.out();
}
}
2 抽象工厂模式
抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品的具体情况下,创建多个产品族的产品对象.
1)工厂接口类
public interface IProductFactory{
public IProduct createProduct(String productNo);
}
2)工厂实现类
public class ProductFactory1 implements IProductFactory {
@Override
public IProduct createProduct(String productNo) {
return new Product1();
}
}
public class ProductFactory2 implements IProductFactory {
@Override
public IProduct createProduct(String productNo) {
return new Product2();
}
}
public class ProductFactory3 implements IProductFactory {
@Override
public IProduct createProduct(String productNo) {
return new Product3();
}
}
3)统一对外工厂
public class ProductFactory {
public static IProduct createProduct(String productNo) {
char ch = productNo.charAt(0);
IProductFactory factory = null;
if (ch == '1') {
factory = new ProductFactory1();
} else if (ch == '2') {
factory = new ProductFactory2();
} else if (ch == '3') {
factory = new ProductFactory3();
}
if (factory != null) {
return factory.createProduct(productNo);
}
return null;
}
}
4)测试类
public class ProductFactoryTest {
public static void main(String[] args) {
IProduct product = ProductFactory.createProduct("2");
product.out();
}
}