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


    什么是设计模式

    现在聊起来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两个工厂为我们制造这些食物,我们不用关心汉堡和饮料到底是怎么制造的,我们只要知道去哪家店能吃到什么就好,不是吗?

  • 相关阅读:
    关于WinForm控件在asp.net中应用的问题。
    评“SuperMap Objects"
    news about matlab r2006a
    one good website for opensource
    a WebSite for MapXtreme2005 Crack
    Asp.net RegularExpressionValidator 控件验证输入值验证输入值是否匹配正则表达式指定的模式
    EditPlus配置手记
    关于asp.net中页面事件加载的先后顺序
    Jquery汇总
    JavaScript必看资源
  • 原文地址:https://www.cnblogs.com/j2eeDevelper/p/5201654.html
Copyright © 2020-2023  润新知