zoukankan      html  css  js  c++  java
  • JAVA设计模式 -- 简单工厂模式设计举例

     1 通过电视机这个生活中的例子,理解简单工厂设计模式 :
     2 
     3 测试类Test.java:
     4 public static void main(String[] args) throws Exception {
     5         //直接访问
     6 //        TV tv = TVFactory.produceTV("Haier");
     7 //        tv.display();
     8         //通过xml配置进行访问
     9         String brandName = XMLUtilTV.getBrandName();
    10         TV tv = TVFactory.produceTV(brandName);
    11         tv.display();
    12     }
    13 通过以上测试类代码可以,我们分别创建:
    14 // 海信电视类
    15 public class HisenseTV implements TV {
    16     @Override
    17     public void display() {
    18         System.out.println("海信电视正在播放中...");
    19     }
    20 }
    21 // 海尔电视类
    22 public class HaierTV implements TV {
    23     @Override
    24     public void display() {
    25         System.out.println("海尔电视正在播放中...");
    26     }
    27 }
    28 // 电视接口
    29 public interface TV {
    30     public void display();
    31 }
    32 
    33 // 其中,HisenseTV,HaierTV都需要起实现TV这个接口,最终我们都是通过工厂类来实现手机的生产,
    34 // 然而工厂又是通过客户传给工厂的电视品牌名来实现定制生产电视机;
    35 // 工厂类
    36 public class TVFactory {
    37     public static TV produceTV(String brand) throws Exception {
    38         if (brand.equalsIgnoreCase("Haier")) {
    39             System.out.println("电视机工厂生产海尔电视机!");
    40             return new HaierTV();
    41         } else if (brand.equalsIgnoreCase("Hisense")) {
    42             System.out.println("电视机工厂生产海信电视机!");
    43             return new HisenseTV();
    44         } else {
    45             throw new Exception("对不起,暂不能生产该品牌电视机!");
    46         }
    47     }
    48 }
    49 在上面测试类当中,我们除了可以直接传入电视的品牌名让工厂生产相应的产品,但是在实际编程过程中,客户的需求
    50 是不段变化的,所以我们可以通过xml文件来专门保存客户端需求,当客户需求变更的时候,我们只需要修改xml配置文
    51 件,而不用去修改我们的源代码,所以上面测试类当中通过xml读取电视品牌名有个单独的方法,所以我们还需要创建
    52 一个工具类用来读取数据:
    53 // 工具类
    54 public class XMLUtilTV {
    55     public static String getBrandName() {
    56         try {
    57             DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
    58             DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
    59             Document doc = documentBuilder.parse(new File("res/SimpleFactoryTVNameConfig.xml"));
    60             NodeList node = doc.getElementsByTagName("brandName");
    61             Node firstChild = node.item(0).getFirstChild();
    62             String brandName = firstChild.getNodeValue().trim();
    63             return brandName;
    64         } catch (Exception e) {
    65             e.printStackTrace();
    66             return null;
    67         }
    68     }
  • 相关阅读:
    Spring boot MultipartResolver
    shell 脚本中的当前工作目录等于执行脚本时所在的工作目录
    IDEA Exception in thread "main" java.lang.ClassNotFoundException: com.streamax.servicecore.business.FileManageServApplication
    java学习路线图-----java基础学习路线图(J2SE学习路线图)
    Java基本语法-----java数组(一维数组二维数组)
    Java基本语法-----java二维数组
    Java基本语法-----java函数
    程序员的自我修养-----Java开发的必须知道的几个注意点
    JAVA面向对象-----java面向对象的六大原则
    Java集合-----java集合框架常见问题
  • 原文地址:https://www.cnblogs.com/fjie/p/13628456.html
Copyright © 2011-2022 走看看