java开发的工厂方法模式及抽象工厂验证示例

 更新时间:2021年10月11日 12:00  点击:1745

工厂方法模式示例

开发一个数据格式转换工具,将不同数据源如:txt、excel等格式文件,转换为XML格式输出,需考虑今后其他格式的文件也需要转换为xml格式的扩展性,利用设计模式的有关知识进行设计。
解决思路,使用工厂方法模式完成该功能的设计,设计类图如下:

在这里插入图片描述

代码结构如下:

在这里插入图片描述

代码如下:

public interface Creator {
    Convertor getConvertor();
}
public class ExcelConvertorCreator implements Creator {
    @Override
    public Convertor getConvertor() {
        return new ExcelConvertor();
    }
}
public class TxtConvertorCreator implements Creator {
    @Override
    public Convertor getConvertor() {
        return new TxtConvertor();
    }
}
public interface Convertor {
    void transform();
}
public class ExcelConvertor implements Convertor {
    @Override
    public void transform() {
        System.out.println("excel转换器");
    }
}
public class TxtConvertor implements Convertor {
    @Override
    public void transform() {
        System.out.println("txt文件转换器");
    }
}

测试代码如下:

public class Testor {
    public  void factoryMethodTest() {
        Creator creator = new TxtConvertorCreator();
        Convertor convertor = creator.getConvertor();
        convertor.transform();
    }
}

运行结果:

在这里插入图片描述

验证结论:使用工厂方法模式完成文件转换器,满足开闭原则,在类的划分上满足单一职责原则,使得程序易扩展、易维护等特征;同时调用方依赖于抽象,不依赖于具体,实现了依赖倒置原则,所有的变量使用接口(抽象类)定义,具体的实现类可以替换它,遵循了里氏替换原则。

抽象工厂模式验证

某公司开发一个手机游戏软件,该软件需要支持IOS、windows Mobile等操作系统平台,针对不同操作系统,提供不同操作控制类和游戏界面控制类,需考虑今后其他操作系统也需要使用这款手游,利用设计模式的有关知识进行设计。
解决思路,使用抽象工厂模式完成该功能的设计,设计类图如下:

在这里插入图片描述

代码结构如下:

在这里插入图片描述

代码如下:

public interface InterfaceController {
    void init();
}
public class IosInterfaceControllerImpl implements InterfaceController {
    @Override
    public void init() {
        System.out.println("苹果界面");
    }
}
public class WinInterfaceControllerImpl implements InterfaceController {
    @Override
    public void init() {
        System.out.println("windows界面");
    }
}
public interface OprationController {
    public void init();
}
public class IosOprationControllerImpl implements OprationController {
    @Override
    public void init() {
        System.out.println("苹果操作逻辑");
    }
}
public class WinOprationControllerImpl implements OprationController {
    @Override
    public void init() {
        System.out.println("windows操作逻辑");
    }
}
public interface AbstractFactory {
  InterfaceController getInterfaceContorller();
  OprationController  getOprationController();
}
public class IosFactoryImpl implements AbstractFactory {
    @Override
    public InterfaceController getInterfaceContorller() {
        return new IosInterfaceControllerImpl();
    }
    @Override
    public OprationController getOprationController() {
        return new IosOprationControllerImpl();
    }
}
public class WinFactoryImpl implements AbstractFactory {
    @Override
    public InterfaceController getInterfaceContorller() {
        return new WinInterfaceControllerImpl();
    }
    @Override
    public OprationController getOprationController() {
        return new WinOprationControllerImpl();
    }
}

测试代码如下:

public class AbstractFactoryTest {
    public void test(){
    AbstractFactory abstractFactory = new WinFactoryImpl();
    OprationController oprationController = abstractFactory.getOprationController();
    InterfaceController interfaceController = abstractFactory.getInterfaceContorller();
    oprationController.init();
    interfaceController.init();
    }
}

运行结果如下:

在这里插入图片描述

验证结论:抽象工厂模式与工厂方法模式很类似,工厂方法模式提供了一个生产对象的方法,而抽象工厂模式提供多个i生产不同对象的方法,此种设计符合开闭原则,程序易维护、易扩展,如:该游戏系统需要在鸿蒙系统上运行,则需要新开发一个具体的鸿蒙工厂,及与鸿蒙操作系统相关的界面控制类与游戏操作类即可。另外,需要注意的是,抽象工厂模式在扩展产品族时很容易,但是在产品等级结构发生变化时,非常不容易。

结论

以上仅给出示例代码,非常简单,为了加深工厂方法模式的体验,建议大家开发完整的Txt、Excel文件转换代码,然后界面层设计两个菜单,分别是Txt和Excel转换。抽象工厂模式体验,则可以查看jdk源码中java.sql包数据库处理部分源码。

以上就是java开发的工厂方法模式及抽象工厂验证示例的详细内容,更多关于java工厂方法模式及抽象工厂验证的资料请关注猪先飞其它相关文章!

[!--infotagslink--]

相关文章

  • javascript设计模式之解释器模式详解

    神马是“解释器模式”?先翻开《GOF》看看Definition:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。在开篇之前还是要科普几个概念: 抽象语法树: 解释器模式并未解释如...2014-06-07
  • Postgresql 如何选择正确的关闭模式

    这篇文章主要介绍了Postgresl 如何选择正确的关闭模式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-18
  • 学习JavaScript设计模式之装饰者模式

    这篇文章主要为大家介绍了JavaScript设计模式中的装饰者模式,对JavaScript设计模式感兴趣的小伙伴们可以参考一下...2016-01-21
  • 如何开启mysql中的严格模式

    很多集成的PHP环境(PHPnow WAMP Appserv等)自带的MySQL貌似都没有开启MySQL的严格模式,何为MySQL的严格模式,简单来说就是MySQL自身对数据进行严格的校验(格式、长度、类型等),比如一个整型字段我们写入一个字符串类型的数...2013-10-04
  • c#标准idispose模式使用示例

    下面将把C#里实现IDispose模式的代码展现出来,大家一起来学习一下,它的使用场合也很多的,当我们手动对网站,数据库作封装时,都会用的到...2020-06-25
  • C# MVC模式中应该怎样区分应用程序逻辑(Controller层)和业务逻辑(Model层)?

    这篇文章主要介绍了C# MVC模式中应该怎样区分应用程序逻辑(Controller层)和业务逻辑(Model层)?,这也小编做.NET项目时经常思考和让人混乱的一个问题,这篇文章写的挺好,一下清晰了许多,需要的朋友可以参考下...2020-06-25
  • JavaScript设计模式之职责链模式

    这篇文章主要介绍了JavaScript设计模式之职责链模式,对设计模式感兴趣的同学,可以参考下...2021-04-25
  • 学习JavaScript设计模式之状态模式

    这篇文章主要为大家介绍了JavaScript设计模式中的状态模式,对JavaScript设计模式感兴趣的小伙伴们可以参考一下...2016-01-12
  • php Observer观察者模式之学习笔记

    当我们在星际中开地图和几家电脑作战的时候,电脑的几个玩家相当于结盟,一旦我们出兵进攻某一家电脑,其余的电脑会出兵救援。 那么如何让各家电脑知道自己的盟友被攻击了...2016-11-25
  • Java接口DAO模式代码原理及应用详解

    这篇文章主要介绍了Java接口DAO模式代码原理及应用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-11-03
  • C#中的IDisposable模式用法详解

    这篇文章主要介绍了C#中的IDisposable模式用法,讲述了垃圾资源回收机制的实现,并对比分析了Dispose()方法、~DisposableClass()析构函数、虚方法Dispose(bool disposing)的原理,需要的朋友可以参考下...2020-06-25
  • 阿里云OpenSearch在php版sdk开启调试模式

    版本:php_v2.0.6 在CloudsearchClient的类中,开启debug模式,设置为true 如:$opts = array('host'=>$host,'debug'=>true); 注意true不能加引号...2016-05-19
  • C#使用Dispose模式实现手动对资源的释放

    这篇文章主要介绍了C#使用Dispose模式实现手动对资源的释放,涉及C#采用Dispose模式操作资源的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • 学习JavaScript设计模式之单例模式

    这篇文章主要为大家介绍了JavaScript设计模式中的单例模式,对JavaScript设计模式感兴趣的小伙伴们可以参考一下...2016-01-21
  • MIUI儿童模式如何开启 小米手机儿童模式开启教程

    您是否遇到过孩子想要玩手机又不好拒绝,或者是您想要给孩子配一个联系用的手机有担心孩子玩手机上瘾?如果您购买的是小米手机,那么MIUI的儿童模式就能很好地解决这个问题...2016-12-21
  • JavaScript设计模式之命令模式

    这篇文章主要介绍了JavaScript设计模式之命令模式,对设计模式感兴趣的同学,可以参考下...2021-04-25
  • PHP单例模式静态类解析和实现源代码

    我们建站的时候,开始是每次请求数据库都要重新连接的、这样显然不合理、然后自己封装了一个数据库操作类、DBTools.php、要解决一个连接多次使用的话、最好的办法是使...2016-11-25
  • vue-router history模式服务器端配置过程记录

    vue路由有hash和history两种模式,这篇文章主要给大家介绍了关于vue-router history模式服务器端配置的相关资料,需要的朋友可以参考下...2021-06-08
  • 学习JavaScript设计模式之责任链模式

    这篇文章主要为大家介绍了JavaScript设计模式中的责任链模式,对JavaScript设计模式感兴趣的小伙伴们可以参考一下...2016-01-21
  • 学习JavaScript设计模式之代理模式

    这篇文章主要为大家介绍了JavaScript设计模式中的状态模式,对JavaScript设计模式感兴趣的小伙伴们可以参考一下...2016-01-14