工厂模式

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();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值