zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    POJ 2007 Scrambled Polygon (极角排序)
    POJ 1113 Wall (凸包 + 思维)
    POJ 2074 Line of Sight(求直线交点 + 思维)
    POJ 1584 A Round Peg in a Ground Hole(凸多边形判断 + 点是否在多边形内 + 点到线段的最短距离)
    HDU 4623 Crime (状压DP + 数学优化)
    P4755 Beautiful Pair
    CF235C Cyclical Quest
    luoguP4449 于神之怒加强版
    扩展KMP
    P4397 [JLOI2014]聪明的燕姿
  • 原文地址:https://www.cnblogs.com/fjie/p/13628607.html
Copyright © 2011-2022 走看看