小故事引入
自上篇继续讲故事
学姐要带我去吃饭,并且还要帮我找酒店,心里莫名其妙的爽快!哦,天哪,桃花运?
我便答应了学姐,和她一起去吃饭。大概晚上七点半左右,学姐给我打电话了,让我出去吃饭,我刚收拾完东西,下宿舍楼,就觉得天气有点不好!阴沉沉的,哪里管得了那么多,便去找学姐了。
“嗨!我在这儿…”,原来学姐已经在校门口等我了!接着我们俩像小兔子似的,走了出去,这一路上,学姐给我讲了许多关于她的事!她原来姓汪,别人都叫她铁锤妹妹,她还有很多好朋友,有记得诚、扬帆向海、小兔神 我们彼此了解,她知道我叫 程忆难!
“你看,那里有家西餐厅,我们去那里吧!”,我说道,我们便进去这家西餐厅,点了两份牛排,喝点红酒什么的!吃完饭后,唉,真是天公不作美,突然下起了雨,我们便一起坐着等雨停下,一直等到晚上十点,可是,老天爷似乎没有罢休!我说:“就在对面就有家酒店,我们一起先过去吧!”,我和学姐便一起奔跑过去,一路上感觉没有淋多少雨,但是我们俩已经从上到下湿透了!更倒霉的是,现在只剩下一间房了!我俩只能委屈一下了,将就一晚上!“咦!啊-----,怎么是一张大床?”,我的天!学姐低声说道:“没关系!先这样吧,我要先去洗澡了,你待会儿帮我把衣服晾一下!”!
学姐走进了洗浴间,开门对我说,帮我把衣服晾起来,我还没来得及反应,直接把衣服递给了我,紧接着听到了水落到肌肤、地上的声音。帮她晾好衣服后,坐在椅子上,好难受!全身湿透了,真的很不舒服… …
"喂该你了!"这一次,我又呆住了,披着浴巾的学姐更加有诱惑力,学姐说我好奇怪,更气人的是,最近上火,突然流鼻血了!此时此刻,我也不知如何是好,往洗澡间跑去…
我洗完澡后,学姐说:“帮我吹下头发吧,我头发还没有干!”我便坐到床边,帮学姐吹起了头发,学姐温润的体香里,夹杂着我的好奇!吹完头发后,我问学姐为什么对我这么好!她说:“不告诉你,关灯睡觉吧”…
可是,被子只有一条,我对学姐说:“你盖吧,晚上应该不冷!”,学姐点点头。我们俩便在床边躺下,漆黑的夜里夹杂着一丝丝尴尬的气氛!忽然有点凉,我突然好冷,我对学姐说:“我能盖点被子吗?有点冷”,“嗯,可以!”。她便把被子给我盖上,并且抱住了我…
下一篇故事,此处变颜色 《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();
}
}
结构是这样的
看到运行结果
学姐对学弟的好感度提升了!!!!!!!!!