设计模式之工厂方法模式

1、工厂模式

以女娲造人为例,实现简单的工厂方法模式

1、首先创建一个人类的接口,人类有肤色,会说话。

2、创建三个人类的实现类。白种人,黑种人,黄种人。

3、创建抽象人类工厂,添加造人的抽象方法,并约束其类型。

4、创建人类创建工厂,继承抽象工厂,实现造人的逻辑。

5、定义业务场景类,测试造人。

package gov.mof.fasp2.gcfr.adjustoffset.adjust;


/**
 * 人类总称
 * @author haokui
 *
 */
interface Human {
    void getColor();//人又肤色
    void speak();//会说话
}

class Black implements Human {

    @Override
    public void getColor() {
        System.out.println("黑种人");
    }

    @Override
    public void speak() {
        System.out.println("黑种人说话");
        
    }
    
}
class White implements Human {

    @Override
    public void getColor() {
        System.out.println("白种人");
    }

    @Override
    public void speak() {
        System.out.println("白种人说话");
        
    }
    
}
class Yellow implements Human {

    @Override
    public void getColor() {
        System.out.println("黄种人");
    }

    @Override
    public void speak() {
        System.out.println("黄种人说话");
        
    }
}
/**
 * 抽象人类工厂
 * @author haokui
 *
 */
abstract class AbstractHumanFactory {
    //这里采用泛型的作用,1、必须是Class类型,2、必须是Human的实现类
    abstract <T extends Human> T createHuman(Class<T> c);
}
class HumanFactory extends AbstractHumanFactory {

    @Override
    <T extends Human> T createHuman(Class<T> c) {
        Human h = null;
        try {
            h = (Human) Class.forName(c.getName()).newInstance();
        } catch (Exception e) {
            System.out.println("生产人种错误");
        } 
        return (T)h;
    }
}
/**
 * 业务场景类
 * @author haokui
 *
 */
public class Main {
    public static void main(String[] args) {
        //创建一个人类工厂
        AbstractHumanFactory f = new HumanFactory();
        Human whiteHuman = f.createHuman(White.class);
        whiteHuman.getColor();
        whiteHuman.speak();
        System.out.println("======分割线=======");
        Human blackHuman = f.createHuman(Black.class);
        blackHuman.getColor();
        blackHuman.speak();
        System.out.println("======分割线=======");
        Human yellowHuman = f.createHuman(Yellow.class);
        yellowHuman.getColor();
        yellowHuman.speak();
    }
    
}

这只是简单的应用。当然也可以更复杂一些,比如造人要区分男性和女性,人的喜怒哀乐等等。

原文地址:https://www.cnblogs.com/hkdpp/p/9072411.html