工厂方法模式

工厂方法模式

简单工厂模式的优势:让对象的调用者和对象创建过程分离,当对象调用者需要对象时,直接向工厂请求即可。从而避免了对象的调用者与对象的实现类以硬编码方式耦合,以提高系统的可维护性、可扩展性。工厂模式也有一个小小的缺陷:当产品修改时,工厂类也要做相应的修改。
老大给我举得例子是女娲造人的例子,造人需要泥人,八卦炉,八卦炉就属于造人的工厂

造人首先要创建一个人类这个类。特征是颜色,会说话

public interface IHuMan {
    public abstract String Color();
    public abstract String Talk();

}

然后创建三个类,分别取名黑种人,白种人,和黄种人,这三个类都继承人类这个接口*/

刚开始女娲娘娘试着造人,第一次没掌握好火候,于是黑人就出来了····

public class BlackHuman implements IHuMan {
@Override
public String Color() {
System.out.println(“黑人出来了,颜色是黑色”);
return null;
}
@Override
public String Talk() {
System.out.println(“黑人说话我听不懂”);
return null;
}

}

然后女娲娘娘第二次造人,这次怕再把火候掌握不好,就早点开炉,结果这次时间太早了,白人诞生了····

public class WhiteHuman implements IHuMan {
@Override
public String Color() {
System.out.println(“白种人诞生了,皮肤颜色是白色”);
return null;
}

@Override
public String Talk() {
    System.out.println("白人一出来,说了一句“my God”");
    return null;
}

}

女娲娘娘总结了前两次的经验,这次是边观察火候,边造人,于是黄种人诞生了

public class YellowHuman implements IHuMan {

@Override
public String Color() {
    System.out.println("黄人诞生了,皮肤颜色是黄皮肤");
    return null;
}

@Override
public String Talk() {
    System.out.println("黄人说的话能听得懂");
    return null;
}

}

于是女娲娘娘就这样不停的造人,日复一日,夜复一夜。但是效率太慢了,于是女娲娘娘想出了一个好办法,问西王母接了她的八卦炉,相处什么人直接扔八卦炉里,什么都不管了,效率高多了

public abstract class AbstractHumanFactory {
public abstract T createHuman(Class c);
}
/*其实工厂方法模式可以和其他多种模式一起配合使用,比如这里就和单列模式一起使用的。
public class HumanFactory implements IHuManFactory {
private static HumanFactory humanFactory = null;
private HumanFactory(){

};
public static HumanFactory getInstance(){
    if(humanFactory == null){
        humanFactory = new HumanFactory();
    }
    return humanFactory;
}
@Override
public <T extends IHuMan> T CreateHuman(Class<T> c) {
    T human = null;
    try {
        human = (T) Class.forName(c.getName()).newInstance();  
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return human;
}

}
/*这样就方便多了,想造什么人就可以直接调用
public class Client {

public static void main(String[] args) {
    BlackHuman bh = HumanFactory.getInstance().CreateHuman(BlackHuman.class);
    bh.getColor();

    WhiteHuman wh = HumanFactory.getInstance().CreateHuman(WhiteHuman.class);
    wh.getColor();

}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值