• JAVA设计模式 -- 工厂方法模式设计举例


     1 与之前的简单工厂模式举例相似,同样通过TV这个生活中比较常见的物件来体验JAVA设计模式中的工厂模式的设计感觉
     2 // 测试类Test.java:
     3 public class Test {
     4     public static void main(String[] args) {
     5         /*TVFactory tvFactory = new HaierTVFactory();
     6         TV tv = tvFactory.produce();
     7         tv.display();*/
     8 
     9         //通过配置文件获取
    10         TVFactory tvFactory = (TVFactory) XMLUtil.getBean();
    11         TV tv = tvFactory.produce();
    12         tv.display();
    13     }
    14 }
    15 // 海尔电视类
    16 public class HaierTV implements TV {
    17     @Override
    18     public void display() {
    19         System.out.println("海尔电视正在播放中...");
    20     }
    21 }
    22 // 海信电视类
    23 public class HisenseTV implements TV {
    24     @Override
    25     public void display() {
    26         System.out.println("海信电视正在播放中...");
    27     }
    28 }
    29 // 海尔电视工厂类
    30 public class HaierTVFactory implements TVFactory {
    31     @Override
    32     public TV produce() {
    33         TV tv = new HaierTV();
    34         return tv;
    35     }
    36 }
    37 // 海信电视工厂类
    38 public class HisenseTVFactory implements TVFactory {
    39     @Override
    40     public TV produce() {
    41         return new HisenseTV();
    42     }
    43 }
    44 // 电视工厂接口,就像一些大型的集团工厂一样,他们可以为不同的客户生产不同的商品
    45 public interface TVFactory {
    46     public TV produce();
    47 }
    48 // 电视接口  
    49 public interface TV {
    50     public void display();
    51 }
    52 
    53 // 同样的 不管是海尔电视,还是海信电视,都需要去实现TV这个父接口,
    54 // 同时,海尔工厂和海信工厂也需要实现TVFactory这个父接口。
    55 // 这样一来,当客户提需求的时候,如果客户需要一台海尔电视机,我们只需要创建一个海尔电视工厂,让他去生产一
    56 // 台海尔电视机就可以了,至于这台电视机如何生产的,客户是不需要知道这些细节的;
    57 
    58 // 最后,我们同样可以通过xml配置文件来获取客户的需求
    59 // 工具类 
    60 public class XMLUtil {
    61     public static Object getBean(){
    62         try {
    63             //创建DOM文档对象
    64             DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
    65             DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
    66             Document doc = documentBuilder.parse(new File("res/FactoryMethodConfig.xml"));
    67             //获取包含类名的文本节点
    68             NodeList nodeList = doc.getElementsByTagName("className");
    69             Node node = nodeList.item(0).getFirstChild();
    70             String className = node.getNodeValue().trim();
    71             //通过反射,将读取出来的类名字符串转换为对象
    72             Class<?> aClass = Class.forName(className);
    73             Object o = aClass.newInstance();
    74             return o;
    75         } catch (Exception e) {
    76             e.printStackTrace();
    77             return null;
    78         }
    79     }
    80 }
  • 相关阅读:
    JDK5.0新特性系列10.监控与管理虚拟机
    JDK5.0新特性系列7.使用ProcessBuilder执行本地命令
    JDK5.0新特性系列4.静态导入
    JDK5.0新特性系列8.泛型编程
    JDK5.0新特性系列11.2线程 任务执行架构
    JDK5.0新特性系列6.格式化输出
    Request的编码问题,客户端为繁体系统时为乱码解决了。
    智能手机之新手篇[转]
    一篇颇有感触的文章
    修复Oracle9i中DBA的密码
  • 原文地址:https://www.cnblogs.com/fjie/p/13628607.html
Copyright © 2020-2023  润新知