Java工厂模式

本文介绍了Java中的工厂模式,包括简单工厂模式、静态工厂模式和多个工厂模式的实现方式。通过创建抽象工厂和具体人类实现接口,展示了如何延迟实例化到子类,并在测试中展示了不同人种的创建过程。此外,还讨论了静态工厂模式的便利性和扩展性挑战。
摘要由CSDN通过智能技术生成

案例(原文链接):

一.工厂模式

即定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。

1.1.

定义了人的接口,内含两个抽象方法。

public interface Human {
    public void getColor();//人有不同的颜色
    public void talk(); //人会说话
}

1.2.

定义了三个类,三个类都实习Human接口

public class YellowHuman implements Human{
    @Override
    public void getColor() {
        System.out.println("Yellow");
    }

    @Override
    public void talk() {
        System.out.println("Yellow man");
    }
}
public class WhiteHuman implements Human{
    @Override
    public void getColor() {
        System.out.println("White");
    }

    @Override
    public void talk() {
        System.out.println("White man");
    }
}
public class BlackHuman implements Human{
    @Override
    public void getColor() {
        System.out.println("Black");
    }

    @Override
    public void talk() {
        System.out.println("Black man");
    }
}

1.3.

定义抽象类工厂

public abstract class AbstractHumanFactory {
    public abstract <T extends Human> T createHuman(Class<T> clazz); //注意这里T必须是Human的实现类才行,因为要造Human嘛
}

1.4.


new和forName

clazz.getName()).newInstance()

 创建了clazz类型的实例。

public class HumanFactory extends AbstractHumanFactory{
    @Override
    public <T extends Human> T createHuman(Class<T> clazz) {
        Human human = null;
        try {
            human = (Human) Class.forName(clazz.getName()).newInstance();
        } catch (Exception e) { //异常处理
            System.out.println("人种产生错误");
        }
        return (T) human;

    }
}

1.5.测试

YellowHuman.class

 上执行结果:

public class FactoryTest {
    public static void main(String[] args) {
        AbstractHumanFactory bagualu = new HumanFactory();
        Human blackMan = bagualu.createHuman(BlackHuman.class); //黑人诞生了
        Human yellowMan = bagualu.createHuman(YellowHuman.class); //黄人诞生了
        Human whiteMan = bagualu.createHuman(WhiteHuman.class); //白人诞生了

    }

}

 二.工厂模式扩展

2.1静态工厂模式

现在只需要一个工厂就可以把人生产出来,不需要要具体的工厂对象,只要使用静态方法。把AbstractHumanFactory抽象类去掉,只保留了HumanFactory类,同时把createHuman方法设置成了static类型。

不用new对象,直接用HumanFactory类调用即可。

public class HumanFactory {
 
	@Override
	public static <T extends Human> T createHuman(Class<T> clazz) {
		Human human = null;
		try {
			human = (Product) Class.forName(clazz.getName()).newInstance();
		} catch (Exception e) { //异常处理
			System.out.println("人种产生错误");
		}
		return (T) human;
	}
}
Human blackMan = HumanFactory.createHuman(BlackHuman.class);

在实际项目中,根据需求可以设置成静态工厂类,缺点是扩展比较困难。

2.2多个工厂模式

不同的工厂创建不通过的产品。

public abstract class AbstractHumanFactory {
    public abstract Human createHuman();
}

public class YellowHumanFactory extends AbstractHumanFactory{
    @Override
    public Human createHuman() {
        return new YellowHuman();
    }
}


public class WhiteHumanFactory extends AbstractHumanFactory{
    public Human createHuman() {
        return new WhiteHuman();
    }
}


public class BlackHumanFactory extends AbstractHumanFactory{
    @Override
    public Human createHuman() {
        return new BlackHuman();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值