首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >程序员该如何管理后宫:皇后造小人(工厂模式)

程序员该如何管理后宫:皇后造小人(工厂模式)

作者头像
木东居士
发布2018-05-25 14:50:10
4580
发布2018-05-25 14:50:10
举报

0x00 前言

朕日常忙于公务,难免偶尔会冷落了皇后,为了不让皇后太无聊,朕决定来教皇后怎么造小人!

别误会,这个小人不是生出来的,是造出来的。朕将这种造小人的仙术教给了皇后,皇后就造了下面的一堆堆小人,这下子就热闹了,皇宫里面跑了一堆的小人。

现有的小人种类:

  • 红色小人
  • 蓝色小人
  • 黑色小人

我暂且认为女人的脑子比男人笨,皇后也不能例外,造小人的方式也比较low。下面朕就详细描述一下皇后是怎么造小人的,然后再分享一下朕是如果通过工厂模式更厉害地造小人的。

0x01 皇后造小人

都说女人是**无脑,此言不虚。我这啥媳妇造小人的时候方法也显得有点笨。

上段是为了场景需要,请忽略,yyj怎么可能比我笨…

yyj的策略很直观,需要几种小人,就创建几个小人的类,然后在造小人的时候就new不同的小人就行。先上个图。

1. 代码清单 RedToy类

这是红色小人类,挺简单的。

public class RedToy {

    public void getColor() {
        System.out.println("我是小红人~");
    }

    public void talk() {
        System.out.println("小红人性格很好,说话也讨人喜欢~~");
    }
}

蓝色小人和黑色小人代码没什么变化,就不再列举出来了。

2. 代码清单 Queen类

Queen类中,皇后需要造哪种小人,就new哪种小人就行了。

public class Queen {
    public static void main(String[] args) {

         System.out.println("------造一批小黑人!------");
        BlackToy blackToy1 = new BlackToy();
        blackToy1.getColor();
        blackToy1.talk();

        System.out.println("------造一批小蓝人!------");
        BlueToy blueToy1 = new BlueToy();
        blueToy1.getColor();
        blueToy1.talk();

        System.out.println("------造一批小红人!------");
        RedToy redToy1 = new RedToy();
        redToy1.getColor();
        redToy1.talk();

    }
}

我们看一下执行结果。

------造一批小黑人!------
我是小黑人~
小黑人方言太重,平常人听不懂!
------造一批小蓝人!------
我是小蓝人~
小蓝人说话说不停,太吵了!~
------造一批小红人!------
我是小红人~
小红人性格很好,说话也讨人喜欢~~

哎呀呀,这下子一堆小人出来了。

那么问题来了,目前只有三种小人,皇后造小人的时候还hold住,如果现在需要创建个七八十种小人,我不太能确定这个工作对脑力的要求有多高。关键是,那么多种小人管理起来也不容易啊,太烦人了。

下面就来见识一下朕的高招。

0x02 工厂模式造小人

朕最初的诉求很简单,就是怎么样方便地造小人!朕这么日理万机,什么事都亲力亲为还不累死,那么多种小人,每造一种就得使用相应造小人的方法,太不符合朕的身份。

其实解决方法也很简单,朕弄一个造小人的阴阳炉(是不是很厉害的样子)!在阴阳炉里面有一个小人清单,你告诉这个阴阳炉造什么样的小人,这个阴阳炉帮你造就行了。解放朕的生产力!

下面就先看一下整体的类图。是不是比上一版复杂了一丢丢?

补充一下: 下面的代码就是一个简单的工厂类了~

1. 代码清单 Queen类

先不讲我们的阴阳炉和小人的设计方法,我们先看看怎么来使用这个阴阳炉。

看代码,这下皇后就省事了,先使用大召唤术召唤出我们的阴阳炉,然后告诉它,去给本宫造一个小黑人,然后阴阳炉就屁颠屁颠地去造一个小黑人。大家可以对比一下之前的皇后类代码,现在是不是轻松多了。

public class Queen {

    public static void main(String[] args) {

        //创建一个阴阳炉,阴阳炉负责造小人
        AbstractToyFactory toyFactory = new YinYangToyFactory();

        System.out.println("------造一批小蓝人!------");
        Toy blueToy = toyFactory.createToy(BlueToy.class);
        blueToy.getColor();
        blueToy.talk();


        System.out.println("------造一批小黑人!------");
        Toy blackToy = toyFactory.createToy(BlackToy.class);
        blackToy.getColor();
        blackToy.talk();

        System.out.println("------造一批小红人!------");
        Toy redToy = toyFactory.createToy(RedToy.class);
        redToy.getColor();
        redToy.talk();

    }
}

看一下运行结果:

------造一批小蓝人!------
我是小蓝人~
小蓝人说话说不停,太吵了!~
------造一批小黑人!------
我是小黑人~
小黑人方言太重,平常人听不懂!
------造一批小红人!------
我是小红人~
小红人性格很好,说话也讨人喜欢~~

看过具体的效果之后,我们来讲一下下面的两大块代码实现。

2. 代码清单 YinYangToyFactory类

YinYangToyFactory 阴阳炉的代码没多少,只有一个根据类名创建相应类的方法,我们想造什么小人,就传进来相应的类名就行了。

public class YinYangToyFactory extends AbstractToyFactory {
    @Override
    public <T extends Toy> T createToy(Class<T> c) {
        Toy toy = null;
        try {
            toy = (Toy) Class.forName(c.getName()).newInstance();
        } catch (Exception e) {
            System.out.println(e);
        }

        return (T) toy;
    }
}

YinYangToyFactory继承了AbstractToyFactory抽象类。AbstractToyFactory中没什么东西,下面就列出来看一下。

3. 代码清单 AbstractToyFactory抽象类

public abstract class AbstractToyFactory {
    public abstract <T extends  Toy> T createToy(Class<T> c);
}

4. 代码清单 Toy接口

为了方便更好的管理小人,我们加一个小人接口。这个也挺简单的,所有的小人实现这个接口就行了。

public interface Toy {
    public void getColor();

    public void talk();
}

5. 代码清单 BlueToy类

小人类一直没什么变化。

public class BlueToy implements Toy{
    @Override
    public void getColor() {
        System.out.println("我是小蓝人~");
    }

    @Override
    public void talk() {
        System.out.println("小蓝人说话说不停,太吵了!~");
    }
}

0xFF 参考

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-11-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x00 前言
  • 0x01 皇后造小人
    • 1. 代码清单 RedToy类
      • 2. 代码清单 Queen类
      • 0x02 工厂模式造小人
      • 1. 代码清单 Queen类
      • 2. 代码清单 YinYangToyFactory类
        • 3. 代码清单 AbstractToyFactory抽象类
          • 4. 代码清单 Toy接口
            • 5. 代码清单 BlueToy类
            • 0xFF 参考
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档