手记

Java 工厂模式——我和漂亮学姐的“雨后小故事”,和漂亮学姐吃完晚饭,突然下雨了......让你以最难忘的方式了解工厂模式


小故事引入

自上篇继续讲故事

学姐要带我去吃饭,并且还要帮我找酒店,心里莫名其妙的爽快!哦,天哪,桃花运?

我便答应了学姐,和她一起去吃饭。大概晚上七点半左右,学姐给我打电话了,让我出去吃饭,我刚收拾完东西,下宿舍楼,就觉得天气有点不好!阴沉沉的,哪里管得了那么多,便去找学姐了。

“嗨!我在这儿…”,原来学姐已经在校门口等我了!接着我们俩像小兔子似的,走了出去,这一路上,学姐给我讲了许多关于她的事!她原来姓汪,别人都叫她铁锤妹妹,她还有很多好朋友,有记得诚扬帆向海小兔神 我们彼此了解,她知道我叫 程忆难

“你看,那里有家西餐厅,我们去那里吧!”,我说道,我们便进去这家西餐厅,点了两份牛排,喝点红酒什么的!吃完饭后,唉,真是天公不作美,突然下起了雨,我们便一起坐着等雨停下,一直等到晚上十点,可是,老天爷似乎没有罢休!我说:“就在对面就有家酒店,我们一起先过去吧!”,我和学姐便一起奔跑过去,一路上感觉没有淋多少雨,但是我们俩已经从上到下湿透了!更倒霉的是,现在只剩下一间房了!我俩只能委屈一下了,将就一晚上!“咦!啊-----,怎么是一张大床?”,我的天!学姐低声说道:“没关系!先这样吧,我要先去洗澡了,你待会儿帮我把衣服晾一下!”!

学姐走进了洗浴间,开门对我说,帮我把衣服晾起来,我还没来得及反应,直接把衣服递给了我,紧接着听到了水落到肌肤、地上的声音。帮她晾好衣服后,坐在椅子上,好难受!全身湿透了,真的很不舒服… …

"喂该你了!"这一次,我又呆住了,披着浴巾的学姐更加有诱惑力,学姐说我好奇怪,更气人的是,最近上火,突然流鼻血了!此时此刻,我也不知如何是好,往洗澡间跑去…

我洗完澡后,学姐说:“帮我吹下头发吧,我头发还没有干!”我便坐到床边,帮学姐吹起了头发,学姐温润的体香里,夹杂着我的好奇!吹完头发后,我问学姐为什么对我这么好!她说:“不告诉你,关灯睡觉吧”…

可是,被子只有一条,我对学姐说:“你盖吧,晚上应该不冷!”,学姐点点头。我们俩便在床边躺下,漆黑的夜里夹杂着一丝丝尴尬的气氛!忽然有点凉,我突然好冷,我对学姐说:“我能盖点被子吗?有点冷”,“嗯,可以!”。她便把被子给我盖上,并且抱住了我…


漂亮学姐的 Java 简单工厂模式

故事中提到,学姐和学弟共进晚餐,帮学弟找酒店,这些都是学姐的想法!
都是要帮助学弟,创建这个帮手接口:

/**
 * 学姐的简单工厂助手
 */
public interface SisterHelper {

    /**
     * 学姐帮助学弟
     */
    void helpBrother();


}


再来创建两个类帮助学弟的类:

  • 学姐和程忆难共进晚餐类
/**
 * 学姐和学弟一起吃晚饭
 */
public class EatDinner implements SisterHelper {

    @Override
    public void helpBrother() {
        System.out.println("学姐 和 学弟程忆难 吃晚饭");
    }
}

  • 学姐帮程忆难找酒店类
/**
 * 学姐帮学弟找酒店
 */
public class FindHotel implements SisterHelper {
    
    @Override
    public void helpBrother() {
        System.out.println("学姐 帮 学弟程忆难 找酒店");
    }
}


创建好了,接下来我们要构建学姐的小脑袋瓜,让学姐做出判断:

/**
 * 学姐的糊涂小脑袋瓜在想什么?
 * 想和学弟共进晚餐?
 * 想帮学弟找酒店?
 */
public class BeautifulSisterFactory {

    public SisterHelper helpBrother(String help) {
        switch (help) {
            case "eatDinner":
                return new EatDinner();
            case "findHotel":
                return new FindHotel();
        }

        return null;
    }

}


好了,接下来我们来实现学姐的作为:


/**
 * 学姐的简单工厂
 *
 * @author CSDN程忆难
 * @link https://myhub.blog.csdn.net
 */
public class Simple {

    public static void main(String[] args) {

        //初始化学姐的小脑袋瓜
        BeautifulSisterFactory beautifulSisterFactory = new BeautifulSisterFactory();

        //学姐和学弟程忆难共进晚餐
        beautifulSisterFactory.helpBrother("eatDinner").helpBrother();

        //学姐帮学弟找酒店
        beautifulSisterFactory.helpBrother("findHotel").helpBrother();

    }
}

现在的程序结构是这样的:

运行看下结果:

可以看到,学姐和学弟发生了了两件事!但是学姐和学弟发生的不只是这两件事,还有和学弟一起等雨、一起在雨中奔跑…

难道还要接着写判断和创建帮学弟的类吗?这显然很麻烦!解耦性不高!请继续往下看!


漂亮学姐的 Java 工厂方法模式

一想法,一作为,先想和学弟一起吃晚饭,接下来行动实现和学弟一起吃晚饭,和学弟找酒店亦是如此!先想再做和实现!

首先写好学姐具体的作为:

/**
 * 学姐要给学弟做的事情
 */
abstract class SisterIdea {

    public SisterIdea() {

    }
}

/**
 * 实现小想法:学姐和学弟共进晚餐
 */
class EatDinner extends SisterIdea {

    public EatDinner() {
        System.out.println("学姐 和 学弟程忆难 共进晚餐");
    }
}

/**
 * 实现小想法:学姐帮学弟找酒店
 */
class FindHotel extends SisterIdea {
    public FindHotel() {
        System.out.println("学姐 帮 学弟程忆难 找酒店");
    }
}

/**
 * 实现小想法:学姐和学弟在雨中奔跑
 */
class Running extends SisterIdea {
    public Running() {
        System.out.println("学姐 和 学弟程忆难 在雨中奔跑");
    }
}

之后写出学姐的小心思、小想法!

/**
 * 学姐的小脑袋瓜
 */
interface SisterBrain {
    SisterIdea createIdea();
}

/**
 * 学姐的小想法:和学弟共进晚餐
 */
class IdeaEatDinner implements SisterBrain {
    @Override
    public EatDinner createIdea() {
        return new EatDinner();
    }
}

/**
 * 学姐的小想法:帮学弟找酒店
 */
class IdeaFindHotel implements SisterBrain {

    @Override
    public FindHotel createIdea() {
        return new FindHotel();
    }
}

/**
 * 学姐的小想法:和学弟一起在雨中奔跑
 */
class IdeaRunning implements SisterBrain {

    @Override
    public Running createIdea() {
        return new Running();
    }
}

接下来学姐要实现她的小想法


/**
 * 学姐的工厂方法
 *
 * @author CSDN程忆难
 * @link https://myhub.blog.csdn.net
 */
public class Simple {

    public static void main(String[] args) {

        //初始化学姐想和学弟共进晚餐的小想法
        IdeaEatDinner ideaEatDinner = new IdeaEatDinner();

        //实现学姐的小想法
        ideaEatDinner.createIdea();

        //======================================================

        //初始化学姐想帮学弟找酒店的小想法
        IdeaFindHotel ideaFindHotel = new IdeaFindHotel();

        //实现学姐的小想法
        ideaFindHotel.createIdea();

        //======================================================

        //初始化学姐想和学弟在雨中奔跑的小想法
        IdeaRunning ideaRunning = new IdeaRunning();

        //实现学姐的小想法
        ideaRunning.createIdea();

    }
}

现在结构是这样的:

运行起来看一下:

现在,学姐只要多一个想法,便写一个方法和一个实现!

随着学姐对学弟的好感度提高!学弟可能猜到了学姐不同的想法!请往下看!


漂亮学姐的 Java 抽象工厂模式

构建学姐的大脑,学弟看到学姐或了解到学姐什么,会做出什么反应?

/**
 * 构建学弟的大脑(工厂)
 * 大脑来构建想法
 */
public interface MyBrain {

    public MyIdea getIdea();

}

class UnderstandSister implements MyBrain {

    @Override
    public MyIdea getIdea() {
        System.out.println("学姐 让 学弟了解她");
        return new Kindly();
    }
}

class TowelSister implements MyBrain {

    @Override
    public MyIdea getIdea() {
        System.out.println("学姐 让 学弟 看到了她披着浴巾");
        return new Beautiful();
    }
}


构建学弟的想法,看到或了解学姐后,学弟会认为什么?

/**
 * 学弟的想法
 */
public interface MyIdea {
    public void think();
}

/**
 * 学弟想到了学姐很和蔼
 */
class Kindly implements MyIdea {

    @Override
    public void think() {
        System.out.println("学弟 想到了 学姐 很和蔼");
    }
}

/**
 * 学弟想到了学姐很漂亮
 */
class Beautiful implements MyIdea {

    @Override
    public void think() {
        System.out.println("学弟 想到了 学姐 很漂亮");
    }
}

接下来,完成这一过程,来运行


/**
 * 学姐的抽象工厂
 *
 * @author CSDN程忆难
 * @link https://myhub.blog.csdn.net
 */
public class Abstract {

    public static void main(String[] args) {

        //构建学弟的大脑 让学弟了解学姐
        MyBrain myBrain1 = new UnderstandSister();

        //了解后 学弟的大脑做出处理
        MyIdea idea1 = myBrain1.getIdea();

        //然后学弟认为学姐很和蔼
        idea1.think();

        System.out.println("===================================");

        //构建学弟的大脑 让学弟看到了学姐披着浴巾
        MyBrain myBrain2 = new TowelSister();

        //看到后 学弟的大脑做出处理
        MyIdea idea2 = myBrain2.getIdea();

        //然后学弟认为学姐很漂亮
        idea2.think();

    }
}

结构是这样的


看到运行结果

学姐对学弟的好感度提升了!!!!!!!!!

0人推荐
随时随地看视频
慕课网APP