开店链接🔗 卖水果老板讲解设计模式之工厂模式
店铺营业危机
店铺营业了一段时间啦,现在店铺的确能够卖出不同品种的水果了,但是仔细察觉一下,就以苹果为例,我们店只能卖普通的苹果,那这样也太平淡了吧!于是一想,不行啊!我这样店铺还怎么开下去!那怎么办呢?
那就只能和水果厂老板聊一聊了!看看他那边有没有不同品种的苹果、香蕉等,于是第二天你去找水果厂老板聊了聊,老板说现在他的水果厂里只有普通的水果,没有其他品种的水果,但是也不是不可以有,老板联系到了另一个水果厂的老板,他那里有我想要的品种!并且苹果、香蕉和橘子他都有两种不同的品种!那现在来看看结合了新的水果厂之后我们店铺的进货情况是怎么样的吧!
工厂改造
原先的工厂为了和新工厂更好的结合,将三个生产普通水果的小厂结合在一起
原先的水果工厂:
🍄🍄🍄🍄🍄
/*
原先的水果工厂生产的过程
* */
public interface Factory {
// 生产普通苹果
public Fruit createApple();
// 生产普通香蕉
public Fruit createBanana();
// 生产普通橘子
public Fruit createOrange();
}
新的工厂:
生产新品种1️⃣
下面是新工厂1号产的三个新品种的品种信息~1️⃣
红富士苹果
public class Red_Fuji_Apple implements Fruit{
@Override
public String getFruitInfo() {
return "我是新品种红富士苹果噢!";
}
}
米蕉
public class Rice_Banana implements Fruit{
@Override
public String getFruitInfo() {
return "我是新品种米蕉噢!";
}
}
沙糖桔
public class Sugar_Orange implements Fruit{
@Override
public String getFruitInfo() {
return "我是新品种沙糖桔噢!";
}
}
下面是新工厂2号产的三个新品种的品种信息~2️⃣
粉红佳人
🍎
public class Pink_Beauty_Apple implements Fruit{
@Override
public String getFruitInfo() {
return "我是新品种粉红佳人噢!";
}
}
芝麻蕉
🍌
public class Tribute_Orange implements Fruit{
@Override
public String getFruitInfo() {
return "我是新品种贡桔噢!";
}
}
贡桔
🍊🍊
public class Tribute_Orange implements Fruit{
@Override
public String getFruitInfo() {
return "我是新品种贡桔噢!";
}
}
聪明的你肯定会想到一个问题,那就是——怎么这么乱啊!又苹果,又香蕉的!一个工厂又可以香蕉又可以苹果的!数量不多时还可以,数量多起来了那就不好管理了啊!于是你和另外两位两位老板商量了一番后决定:那就分开管理,一个小工厂专门生产苹果、另一个专门生产香蕉…回到原来的老方法管理好像还更轻松!
🙋♀️🙋♀️🙋♀️🙋♀️
苹果新工厂
🍎🍎🍎🍎🍎
/*
* 苹果工厂:生产不同品种苹果
* */
public class AppleFactory {
public Apple createApple(){
Apple apple = new Apple();
apple.getFruitInfo();
System.out.println("苹果生产成功!");
return apple;
}
public Red_Fuji_Apple createRedFujiApple(){
Red_Fuji_Apple red_fuji_apple = new Red_Fuji_Apple();
red_fuji_apple.getFruitInfo();
System.out.println("红富士苹果生产成功!");
return red_fuji_apple;
}
public Pink_Beauty_Apple createPinkBeautyApple(){
Pink_Beauty_Apple pink_beauty_apple = new Pink_Beauty_Apple();
pink_beauty_apple.getFruitInfo();
System.out.println("粉红佳人苹果生产成功!");
return pink_beauty_apple;
}
}
香蕉新工厂
🍌🍌🍌
/*
* 香蕉工厂:生产香蕉
* */
public class BananaFactory {
public Banana createBanana(){
Banana banana = new Banana();
System.out.println("香蕉生产成功!");
return banana;
}
public Rice_Banana createRiceBanana(){
Rice_Banana rice_banana = new Rice_Banana();
rice_banana.getFruitInfo();
System.out.println("米蕉生产成功!");
return rice_banana;
}
public Sesame_Banana createSesameBanana(){
Sesame_Banana sesame_banana = new Sesame_Banana();
sesame_banana.getFruitInfo();
System.out.println("芝麻蕉生产成功!");
return sesame_banana;
}
}
橘子工厂
🍊🍊
/*
* 橘子工厂:生产橘子
* */
public class OrangeFactory {
public Orange createOrange(){
Orange orange = new Orange();
orange.getFruitInfo();
System.out.println("橘子生产成功!");
return orange;
}
public Sugar_Orange createSugarOrange(){
Sugar_Orange sugar_orange = new Sugar_Orange();
sugar_orange.getFruitInfo();
System.out.println("生产沙糖桔成功!");
return sugar_orange;
}
public Tribute_Orange createTributeOrange(){
Tribute_Orange tribute_orange = new Tribute_Orange();
tribute_orange.getFruitInfo();
System.out.println("生产贡桔成功!");
return tribute_orange;
}
}
进货单来啦
好啦,工厂都安排好啦,下面是最新的进货单,请查收!
public class Order {
public static void main(String[] args) {
System.out.println("老板好,以下是你最新的进货单!");
System.out.println("苹果厂生产的苹果....");
AppleFactory appleFactory = new AppleFactory();
Apple apple = appleFactory.createApple();
Red_Fuji_Apple redFujiApple = appleFactory.createRedFujiApple();
Pink_Beauty_Apple pinkBeautyApple = appleFactory.createPinkBeautyApple();
System.out.println("香蕉厂生产的香蕉....");
BananaFactory bananaFactory = new BananaFactory();
Banana banana = bananaFactory.createBanana();
Rice_Banana riceBanana = bananaFactory.createRiceBanana();
Sesame_Banana sesameBanana = bananaFactory.createSesameBanana();
System.out.println("橘子厂生产的橘子....");
OrangeFactory orangeFactory = new OrangeFactory();
Orange orange = orangeFactory.createOrange();
Sugar_Orange sugarOrange = orangeFactory.createSugarOrange();
Tribute_Orange tributeOrange = orangeFactory.createTributeOrange();
System.out.println("进货单如上");
}
}
总结:这就是我们所说的多工厂模式
,这样子的话每产品类都对应了一个创造类,这种做法的好处就结构简单,创建类的职责清晰,但是这样也给我们店铺的可扩展性和可维护性带来了一定的影响,具体啥意思呢?那就是如果我现在想卖水蜜桃,那么我就要又要创建一个工厂,创建工厂啊!那可以一笔不小的开销!那如果我还想要卖西瓜🍉,葡萄🍇d…等呢
当然啦,在比较复杂的应用中一般采用多工厂模式,然后再来一个协调类,这里我们没有加上,这里加上协调类的目的就是避免调用者与各子工厂交流,封装子工厂类,对高层模块提供统一的访问接口,有点复杂噢,以后再出一篇博客来演示一下好啦
。
好啦,看上去都非常完美!,直到有一天:
“老板,有没有水蜜桃蛋糕卖啊?”
我:“啊?”
下期预告~~