大白话 设计模式之虚拟工厂

什么是设计模式

现在聊起来java设计,那就必然要聊聊设计模式,几年前我刚入行的时候,总是听人说起设计模式,在当时的我看来,那是多么高大上的东西啊,以至于有种遥不可及的感觉,如今自己做java也好几个年头了,今天来谈谈如今我眼中的设计模式

说白了,设计模式就是前辈高人总结出来的一套编写好代码的方法,就好比是面向对象的武林秘籍,凡夫俗子如果能够运用自如也立马能够成为武林高手.

那什么又是虚拟工厂呢?

在聊虚拟工厂之前,我们先举个例子:

 我们把汉堡快餐店抽象到面向对象的世界里,那我们要怎么做呢? 首先我们建造一个快餐店的模型,我们可以在快餐店里点汉堡,点饮料

public interface FastFoodStore {
/**点汉堡 */
Hamburger orderHamburger();

/**点饮料 */
Drink orderDrink();
}

 有了快餐店,我们不能忘记最重要的东西--食物, 于是我们有了汉堡和饮料的模型:

public interface Drink {
/** */
public void desc();
}

public interface Hamburger {
/** */
void desc();
}

 那么你喜欢吃哪家快餐呢? 我们有很多种选择,比如说KFC,

public class KFC implements FastFoodStore {
/**点KFC的汉堡 */
public Hamburger orderHamburger() {
    
    return new KFCHamburger();
}

/**点KFC的饮料 */
public Drink orderDrink() {
    return new KFCDrink();
}

}

比如说McDonald:

public class Mcdonald implements FastFoodStore {
/**点McDonald汉堡 */
public Hamburger orderHamburger() {
    return new McHamburger();
}

/**点McDonald饮料 */
public Drink orderDrink() {
    return  new McDrink();
}
}

当然每个店的口味可不一样,对于KFC,它有自己的汉堡和饮料:

public class KFCDrink implements Drink {
/** */
public void desc() {
    System.out.println("KFC饮料");
}
}

public class KFCHamburger implements Hamburger {
/** */
public void desc() {
    System.out.println("KFC汉堡");
}
}

McDonald 也一样:

public class McDrink implements Drink {
/** */
public void desc() {
    System.out.println("Mcdonald饮料");
}
}

public class McHamburger implements Hamburger {
/** */
public void desc() {
    System.out.println("McDonald汉堡");
}
}

纠结了半天,我打算两家都吃一遍:

public static void main(String[] args) {
    FastFoodStore food ;
    Hamburger hamburger;
    Drink drink;
    //先去KFC
    food = new KFC();
    //点餐
    hamburger = food.orderHamburger();
    drink = food.orderDrink();
    //看看卖相怎么样
    hamburger.desc();
    drink.desc();

    //再去McDonald
    food = new Mcdonald();
    //点餐
    hamburger = food.orderHamburger();
    drink = food.orderDrink();
    //再看看怎么样
    hamburger.desc();
    drink.desc();
}

结果

KFC汉堡
KFC饮料
McDonald汉堡
Mcdonald饮料

其实这就是抽象工厂,引用专业的定义就是 为创建一组相关或相互依赖的对象提供一个接口,而且无需指定它们的具体类

在这个例子中,一组相关的东西就是指汉堡和饮料,我们有KFC和McDonald两个工厂为我们制造这些食物,我们不用关心汉堡和饮料到底是怎么制造的,我们只要知道去哪家店能吃到什么就好,不是吗?

转载于:https://www.cnblogs.com/j2eeDevelper/p/5201654.html

你可能感兴趣的:(大白话 设计模式之虚拟工厂)