设计模式连环炮-简单工厂已无法满足老浣熊

    接着上集。。。。

    这简单工厂老浣熊玩的妥妥儿的,享受着园长和厂长的双重快乐~~。

    直到这一天的到来:

    一群水灵灵的小学生来春游,转了没多久就有些失望了,跑到老浣熊跟前问道:"老浣熊爷爷,为什么动物园没有熊猫 长颈鹿 猴子 大象......(此处略过上百种动物),我们想看熊猫 长颈鹿 猴子 大象......(此处又略过上百种动物)。"

    老浣熊眉头一紧:"这群熊孩子,喊谁爷爷呢!我比你们爸爸还小呢!叫哥哥!" 

    "好的,老浣熊爷爷,老浣熊爷爷你这么厉害能再变出来这些动物吗?"

    看着这些水嫩的大眼睛,"好吧,哥哥这就给你们造出来!先来个猴子吧!"

public class Monkey implements Animal {    @Override    public void sayYourName() {        System.out.println("I am monkey");    }}

    猴子的定义有了,接下来就是定义工厂啦。

public class AnimalFactory {    public static Animal createAnimal(String animalType) {        Animal animal = null;        switch (animalType) {            case "dog":                animal = new Dog();                break;            case "cat":                animal = new Cat();                break;            case "raccoon":                animal = new Raccoon();                break;            case "monkey":                animal = new Monkey();                break;        }        return animal;    }}

    工厂也有啦!接下来就让工厂自己给这群小猴子造猴子去吧!

    正当老浣熊得意洋洋准备拂袖而去,小猴子们,啊不,是小学生们涌了上来:老浣熊爷爷,我的熊猫 长颈鹿 大象......(此处继续略过上百种动物)

                                             

    老浣熊眉头已锁死,第一次察觉到,小孩子是比女人更可怕的存在但也只能硬着头皮干了。。。

    在数以秒记的时间里,他疯狂地给代码加case条件,偶尔再给动物加点属性,看起来还是有条不紊。

    没一会儿,已经做了一半了了。突然有个小学生跑来拉着老浣熊的袖口:爷爷爷爷,我要的"河马",但是给我的是狗狗,呜呜呜呜.....老浣熊定眼一看,哟,加逻辑的时候不小心改错了其他逻辑了。这可怎么办呐?这要坏我百年好浣熊的名声!

    那有没有一种办法,既可以保留简单工厂的特点,把new的实现交给factory,又可以在新增一种神兽的时候不会涉及原有逻辑的改动呢???已经入土的代码最好就不要去动了好伐!

                                             

    禅定七七四十九秒后,老浣熊聪明的脑袋瓜蹦出了个想法:// 定义一个神兽工厂,各种具体的神兽去实现它

public interface AnimalFactory {    public Animal createAnimal();}--------------------------------------------------------------------public class DogFactory implements AnimalFactory {    @Override    public Animal createAnimal() {        return new Dog();    }}--------------------------------------------------------------------public class CatFactory implements AnimalFactory {    @Override    public Animal createAnimal() {        return new Cat();    }}--------------------------------------------------------------------// 在想要实例化某种神兽d额时候,通过子类去实例化 public static void main(String[] args) {        AnimalFactory factory = new CatFactory();        factory.createAnimal().sayYourName();
        AnimalFactory factory2 = new DogFactory();        factory2.createAnimal().sayYourName();    }

 

    "不得不说,老夫的智慧真是令人发指啊!这谁能想得到?再多个草泥马,就加个AnimalFactory的子类实现,想要生产的时候new 草泥马的工厂,完美。隔壁王婶儿再也不用担心我动到原来的代码,影响他儿子看河马了"

                                             

 

 


    随着普通工厂的建立,似乎神兽们的批量召唤变的更加的简单了

    但随着神兽的种类和数量的增多以及游客数量的增多,老浣熊感觉到年过三十的体力不支、记忆减退导致接待和管理上的力不从心

    所以,他决定,再做些调整

 

                                                                                欢迎关注公众号:Java面霸君

                                                                            

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值