`
jgsj
  • 浏览: 1051426 次
文章分类
社区版块
存档分类
最新评论

Java设计模式之从星际争霸1分析抽象工厂模式

 
阅读更多

  抽象工厂模式是创建型模式之一。创建型模式有工厂模式(抽象工厂、工厂方法)、生成器模式、单体模式、原型模式四种。下面我来简单分析一下抽象工厂模式。

  抽象工厂模式的定义是创建一个提供一系列相关或相互依赖对象的接口,而无需指定它们具体的类。所有的创建型模式有一个特点,我们不关心工厂生产出来的具体对象的类型,我们会将其具体的类与工厂分离开来。这么说的话,很抽象难懂,下面是一个关于星际争霸的例子。

  在游戏星际争霸中,人族的兵营可以生产两种兵:机枪兵和火焰兵,机枪兵能够用机枪攻击,火焰兵能够用火焰枪来攻击。我们需要构建一个兵营,使得能够生产这两种兵,并且他们都有着自己的攻击方法。

  Java代码如下:

interface SoldierFactory{
    Soldier ProduceMarine();
    Soldier ProduceFirebat();
}

interface Soldier{
    void attack();
}

class Marine implements Soldier{
    public void attack(){
        System.out.println("机枪兵用机枪扫射");
    }
}

class Firebat implements Soldier{
    public void attack(){
        System.out.println("火焰兵使用喷火枪进行攻击");
    }
}

class Barracks implements SoldierFactory{
    public Soldier ProduceMarine(){
        System.out.println("生成了一个机枪兵");
        return new Marine();
    }
    
    public Soldier ProduceFirebat(){
        System.out.println("生成了一个火枪兵");
        return new Firebat();
    }
}

class Demo
{
    public static void main(String[] args) {
        Barracks myBarrack = new Barracks();
        Soldier marine = myBarrack.ProduceMarine();
        Soldier firebat = myBarrack.ProduceFirebat();
        marine.attack();
        firebat.attack();
    }
}

  抽象工厂SolderFactory接口声明了两种方法,生产机枪兵和生产火焰兵。每个兵种都能够攻击,因此它们均继承于Soldier接口。我们定义了Marine和Firebat类,将这两种兵种的行为实现了。最后,为了实现生产兵种,我们定义了一个兵营类Barracks,并实现了SolderFactory中的方法,分别在ProduceMarine和ProduceFirebat中实现了生产机枪兵和火焰兵的方法,并作为方法的返回值返回。

  在main方法中,我们看到了,我们先实例化了一个兵营myBarracks,然后用ProduceMarine和ProduceFirebat实现了兵种的生产,最后我们可以调用兵种的attack方法来让他们用自己的方式攻击。

  这里需要注意的是,我们在声明marine和firebat对象时,我们始终用的是Soldier这个接口来定义的,而不是用它们具体的类(Marine、Firebat)来进行定义。为什么要这么做?主要的原因还是为了实现分离,降低代码的耦合度;另外Marine和Firebat类,可能会存在别的方法,用Soldier来进行声明的话,就只会把attack方法暴露给我们。

  抽象工厂模式的缺点也是显而易见的。假设我们要为工厂增加幽灵特工(Ghost,也就是我们俗称的原子弹兵)和医疗兵,我们不得不修改SoldierFactory,为它增加ProduceGhost和ProduceMedic方法声明,这是不利于我们进行扩展的。也就是说,它难以支持新种类的产品。

分享到:
评论

相关推荐

    Swing星际争霸-java编写

    Swing星际争霸是一款基于Java编程语言开发的游戏,它利用了Java Swing库来构建用户界面和游戏逻辑。Swing是Java Foundation Classes (JFC)的一部分,主要用于创建桌面应用程序,提供了丰富的组件集,允许开发者构建...

    php设计模式之抽象工厂模式分析【星际争霸游戏案例】

    在分析星际争霸游戏案例时,我们可以看到抽象工厂模式的应用场景和解决的问题。 在星际争霸游戏中,玩家在游戏中需要区分敌我,这涉及到游戏中兵种和单位的显示问题。例如,鼠标悬停在自己的单位上时通常会显示绿色...

    Java版星际争霸

    《Java版星际争霸》是一款基于Java编程语言开发的2D策略游戏,其灵感来源于经典的即时战略游戏《星际争霸》。这款游戏充分利用了Java的跨平台特性,使得玩家可以在各种操作系统上体验到星际争霸般的战斗快感。 在...

    java swing 游戏 星际争霸 java swing 游戏 星际争霸

    综上所述,用Java Swing开发“星际争霸”游戏是一项综合性的任务,涉及GUI设计、事件处理、数据结构与算法、图形渲染、网络编程等多个领域,同时也需要良好的编程习惯和测试策略。通过这个项目,开发者可以深入掌握...

    java开源项目 星际争霸

    《星际争霸》是一款深受玩家喜爱的经典即时战略游戏,而在编程领域,使用Java语言来复刻这样一款游戏无疑是一项挑战性的任务。这个开源项目为开发者提供了一个独特的学习平台,让大家有机会深入理解游戏开发背后的...

    java模拟开发《星际争霸》+可联机多人游戏+源码

    java模拟开发《星际争霸》+可联机多人游戏+源码 导入工程后,运行src.test.MyTestGameCore.java(窗口模式)或者src.test.TestGameCore.java(全屏模式)即可。

    Java版的星际争霸

    《Java版的星际争霸》是一款由国外开发者使用Java 6.0编程语言开发的迷你游戏,旨在探索和展示Java在图形用户界面(GUI)和实时游戏性能方面的潜力。这款小游戏虽然规模不大,但却充分体现了Java语言的强大功能和跨...

    Java Swing星际争霸1(Google Code地址)

    此项目名为“Java Swing星际争霸1”,它是一个基于Java Swing开发的桌面应用程序,目的是模拟或重现经典游戏《星际争霸》的部分功能或界面。该项目源代码托管在Google Code平台上,供有兴趣的开发者学习和参考。 ##...

    星际争霸鼠标方案

    "星际争霸鼠标方案"是一个针对经典游戏《星际争霸》定制的专业鼠标设计项目,旨在为玩家提供更精确、更符合游戏操作习惯的控制设备。 首先,我们来详细探讨一下“星际争霸鼠标”的设计特点。由于《星际争霸》是一款...

    java山寨版星际争霸demo

    【Java山寨版星际争霸Demo】是一个基于Java编程语言开发的3D游戏项目,它尝试复刻经典游戏《星际争霸》的一些核心玩法和视觉效果。这个Demo不仅提供了游戏体验,还包含源代码,使得开发者和学习者能够深入理解游戏...

    java源码:JAVA版Swing星际争霸游戏源代码.rar

    10. **设计模式**:可能运用到观察者模式、工厂模式等设计模式,提高代码可维护性和可扩展性。 总的来说,这个项目为Java开发者提供了一个深入理解和实践GUI编程、游戏开发的平台,同时也提供了学习和借鉴经典游戏...

    星际争霸1在windows7系统下运行花屏的独家解决方法,2022全网最好用的方法。

    《星际争霸1在Windows7系统下运行花屏问题的解决方案》 星际争霸,这款经典即时战略游戏,即使在新时代的Windows7操作系统上,仍然受到众多玩家的喜爱。然而,部分玩家在尝试运行游戏时遇到了花屏或游戏乱码的问题...

    23种设计模式的java源代码实现.rar

    Java中,工厂方法模式提供了一种创建对象的抽象方式,使得系统更易于扩展。 7. **观察者(Observer)模式**:定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动...

    Win10系统玩《星际争霸1》时画面显示不全怎么办.docx

    Win10 系统玩《星际争霸 1》时画面显示不全的解决方法 Win10 系统玩《星际争霸 1》时画面显示不全的问题是一个非常常见的问题,该问题的出现可能是由于《星际争霸 1》游戏的兼容性问题所引起的。在 Win10 系统中,...

    Swing星际争霸游戏

    Swing星际争霸游戏是一款基于Java Swing库开发的桌面游戏,专为Java爱好者设计,它展现了Swing在构建图形用户界面(GUI)方面的强大功能。Swing是Java Foundation Classes (JFC)的一部分,提供了丰富的组件和工具,...

    java实现星际争霸的部份源码

    总的来说,"java实现星际争霸的部份源码"涵盖了Java编程的多个方面,包括但不限于游戏逻辑设计、GUI开发、多线程编程、数据结构与算法应用、内存管理以及网络编程。这样的项目不仅能锻炼开发者的技术能力,也对理解...

    java_sc星际争霸源码

    这是一个星际争霸游戏源码压缩包。 里面包含了代码和图片。

    星际争霸Windows7花屏补丁

    总的来说,"星际争霸Windows7花屏补丁"是一个专为解决Windows7环境下《星际争霸》游戏花屏问题而设计的解决方案,通过更新关键系统组件和游戏接口,它让玩家能够在现代操作系统上享受这款经典游戏的魅力。...

Global site tag (gtag.js) - Google Analytics