【04】【工厂方法模式】



Factory Method(工厂模式):定义一个用于创建对象的接口,让子类决定将哪一个类实例化。Factory Method使一个类的实例化延迟到其子类。

类型:创建型模式

类图:


使用方法:

抽象产品类

public abstract class Product {
    /**
     * 产品公共方法
     */
    public void method1() {
        // 业务逻辑处理
    }

    /**
     * 抽象方法
     */
    public abstract void method2();
}

具体产品类1

public class ConcreteProduct1 extends Product {
    @Override
    public void method2() {
        // 业务逻辑处理
    }
}

具体产品类2

public class ConcreteProduct2 extends Product {
    @Override
    public void method2() {
        // 业务逻辑处理
    }
}

抽象工厂类

public abstract class Creator {
    /**
     * 创建一个产品对象,输入参数类型可以自行设置,通常为String,Enum,Class等,也可为空
     *
     * @param c   类的字字码对象
     * @param <T> 参数化类型
     * @return 类的一个实例
     */
    public abstract <T extends Product> T createProduct(Class<T> c);
}

具体工厂类

public class ConcreteCreator extends Creator {
    @Override
    public <T extends Product> T createProduct(Class<T> c) {
        Product product = null;
        try {
            product = (Product) Class.forName(c.getName()).newInstance();
        } catch (Exception e) {
            // 异常处理
        }

        return (T) product;
    }
}

场景类

public class Client {
    public static void main(String[] args) {
        Creator creator = new ConcreteCreator();
        Product product1 = creator.createProduct(ConcreteProduct1.class);
        Product product2 = creator.createProduct(ConcreteProduct2.class);
    }
}

优点:

1、良好的封装性,代码结构清晰。

2、工厂方法模式的扩展性非常优秀。

3、屏蔽产品类,产品类的实现如何变化,调用者不需要关心,它只需要关心产品的接口,接口保持不变,系统中的上层模块就不要发生变化。

4、经典的解耦框架,高层模块只需要知道产品的抽象类,其它的实现都不用关心,符合迪米特法则。

使用场景:

1、是new一个方法的替代品,在所胡需要生成对象的地方都可以使用。

2、需要灵活的、可扩展的框架时。

3、可以用在异构的项目中。

4、可以使用在测试驱动开发的框架下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值