设计模式之工厂方法模式

工厂方法模式

一、nuwa造人的故事-通过工厂模式造人

层次越高,一般来说越抽象。

// 定义Human的接口
public interface Human {
    // 肤色
    public void getColor();
    // 交流
    public void talk();
}
// 定义一个抽象的Human工厂
// 这个工厂有抽象方法createHuman。入参Class<T>类型,入参是实现了Human接口类的Class对象
public abstract class AbstractHumanFactory {
    public abstract <T extends Human> T createHuman(Class<T> c);
}
// Human接口的具体实现
public class BlackHuman implements Human {
    @Override
    public void getColor() {
        System.out.println("黑人是黑色皮肤");
    }

    @Override
    public void talk() {
        System.out.println("黑人说的话...");
    }
}
// 创建HumanFactory 实现抽象类里的方法
public class HumanFactory extends AbstractHumanFactory {

    public <T extends Human> T createHuman(Class<T> c){
        Human human = null;
        try{
           human = (T) Class.forName(c.getName()).newInstance();
        }catch (Exception e){
            System.out.println("出现错误了");
        }
        return (T) human;
    }
}
// 通过传入不同的类对象造人
public class Nuwa {
    public static void main(String[] args) {
        AbstractHumanFactory humanFactory = new HumanFactory();
   
        BlackHuman blackHuman = humanFactory.createHuman(BlackHuman.class);
        blackHuman.getColor();
        blackHuman.talk();
        // 其他肤色人种同上,需要创建不同Human的实现
    }
}

在这里插入图片描述
工厂方法模式的定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类。
工厂方法模式的优点:
1、封装性,代码结构清晰。不需要关注创建过程,只需要知道创建产品的类名。​
2、扩展性,如果新增了产品,只需要修改具体工厂类或者新建一个工厂类​
3、屏蔽产品类 。产品类的实现如何变化,调用者都不需要关心,只需要关心产品的接口。

二、工厂模式的扩展

1、简单工厂模式

// 待补充

2、升级为多个工厂类

3、替代单例模式

4、延迟初始化

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值