工厂方法模式示例
开发一个数据格式转换工具,将不同数据源如: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工厂方法模式及抽象工厂验证的资料请关注编程网其它相关文章!