Welcome everyone

工厂方法模式

设计模式 汪明鑫 853浏览 0评论

我们以去肯德基吃饭来模拟工厂模式,肯地基就好比一个工厂,加工各种食物。

 

先需要一个Food的接口:

/**
 * 食物
 *
 * @author: wangmingxin1
 * @create: 2018-10-31 12:37
 **/
public interface Food {
    void info();
}

 

需要不同的食物实现这个接口:

 

汉堡:

/**
 * @author: wangmingxin1
 * @create: 2018-10-31 12:38
 **/
public class Hamburger implements Food {

    @Override
    public void info() {
        System.out.println("汉堡:15元");
    }
}

 

薯条:

/**
 * @author: wangmingxin1
 * @create: 2018-10-31 12:39
 **/
public class FrenchFries implements Food{
    @Override
    public void info() {
        System.out.println("薯条:12元");
    }
}

 

可乐:

/**
 * @author: wangmingxin1
 * @create: 2018-10-31 12:40
 **/
public class Coke implements Food {
    @Override
    public void info() {
        System.out.println("可乐:10元");
    }
}

 

需要制作这些食物的工厂   肯德基

/**肯德基
 * 制作食物的工厂
 *
 * @author: wangmingxin1
 * @create: 2018-10-31 12:41
 **/
public class KFC {
    //c 是顾客指定要哪种类型的食物
    public static Food createFood(Class c) throws Exception {
        Food food = null;
        food= (Food) Class.forName(c.getName()).newInstance();

        return food;
    }
}

 

顾客类  main方法,调用工厂方法

/**
 * 顾客点餐
 *
 * @author: wangmingxin1
 * @create: 2018-10-31 12:44
 **/
public class Customer {

    public static void main(String[] args) throws Exception {
        //一个饥饿的大叔来到KFC 一顿猛点

        //先来个汉堡
        Food hamburger = KFC.createFood(Hamburger.class);
        hamburger.info();

        //没吃饱,再来包薯条
        Food frenchFries = KFC.createFood(FrenchFries.class);
        frenchFries.info();

        //再来杯可乐,美滋滋
        Food coke = KFC.createFood(Coke.class);
        coke.info();
        
        System.out.println("吃饱喝足,溜了 ...");
    }
}

 

运行结果:

 

最后附上代码地址:https://github.com/xinyeshuaiqi/DesignPattern/tree/master/src/pers/wmx/factorymethod

 

转载请注明:汪明鑫的个人博客 » 工厂方法模式

喜欢 (0)

说点什么

您将是第一位评论人!

提醒
avatar
wpDiscuz