zoukankan      html  css  js  c++  java
  • Java工厂方法模式 Polonium

    TVFactory:

    public abstract class TVFactory {
        public abstract TV produceTV();
    }
    

    TV:

    public abstract class TV {
        public abstract void play();
    }
    

    HaierTV:

    public class HaierTV extends TV{
    
        @Override
        public void play() {
            System.out.println("This is HaierTV play!");
        }
        
    }
    

    HisenseTV:

    public class HisenseTV extends TV{
    
        @Override
        public void play() {
            System.out.println("This is HisenseTV play!");
        }
        
    }
    

    HaierTVFactory:

    public class HaierTVFactory extends TVFactory{
    
        @Override
        public TV produceTV() {
            return new HaierTV();
        }
       
    }
    

    HisenseTVFactory:

    public class HisenseTVFactory extends TVFactory{
    
        @Override
        public TV produceTV() {
            return new HisenseTV();
        }
        
    }
    

    FactoryMethod(Client):

    public class FactoryMethond {
    
        public static void main(String[] args) {
            TVFactory tvf_1 = new HaierTVFactory();
            tvf_1.produceTV().play();
            TVFactory tvf_2 = new HisenseTVFactory();
            tvf_2.produceTV().play();
        }
        
    }
    

    Result:

    This is HaierTV play!
    This is HisenseTV play!

    使用config.xml的方式调用。

    注意:这里config.xml的路径。你需要在项目的根目录下创建一个专门放config.xml的文件,方便调用。我创建的是xmlFolder文件夹。(不创建文件夹直接创建xml文件放置在src中可能会出现找不到文件的错误。)

    本人文件结构如下(IDE:Intellij IDEA):

    在src中添加XMLUtil.java(注意该类中调用className的方式。即从NodeList到classNode.getNodeValue();结束):

    import org.w3c.dom.Document;
    import org.w3c.dom.Node;
    import org.w3c.dom.NodeList;
    
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import java.io.File;
    
    public class XMLUtil {
        public static Object getBean() {
            try {
                //创建文档对象
                DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();
                DocumentBuilder builder = dFactory.newDocumentBuilder();
                Document doc;
                doc = builder.parse(new File("xmlFolder/config.xml"));
    
                //获取包含类名的文本节点
                NodeList nl = doc.getElementsByTagName("className");
                Node classNode = nl.item(1).getFirstChild();
                String cName = classNode.getNodeValue();
    
                //通过类名生成实例对象并将其返回
                Class c = Class.forName(cName);
                Object obj = c.newInstance();
                return obj;
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
        }
    }

     config.xml:

    <?xml version="1.0" encoding="utf-8" ?>
    
    <config>
        <className>HaierTVFactory</className>
        <className>HisenseTVFactory</className>
    </config>
    

    FactoryMethod修改:

    public class FactoryMethod {
        public static void main(String[] args){
    
            try
            {
                TV tv;
                TVFactory factory;
                factory = (TVFactory)XMLUtil.getBean();
                tv = factory.produceTV();
                tv.play();
            }
            catch(Exception e)
            {
                System.out.println("Error");
            }
        }
    }
    

     结果:This is HisenseTV play!  

  • 相关阅读:
    session中删除数组中的某一个值
    Windows 查看端口占用进程并关闭
    Debian 9 / Debian 10 / Ubuntu 18.04 / Ubuntu 18.10快速开启BBR加速 或 关闭BBR加速
    在ASP.NET Web API 2中使用Owin OAuth 刷新令牌(示例代码)
    在ASP.NET Web API 2中使用Owin基于Token令牌的身份验证
    Web API 2 的操作结果
    WebApi接口安全性 接口权限调用、参数防篡改防止恶意调用
    关于EF中使用Migrations的一些小提示
    Entity Framework 6 多对多增改操作指南
    用MVC5+EF6+WebApi 做一个考试功能(六) 仓储模式 打造EF通用仓储类
  • 原文地址:https://www.cnblogs.com/softwarecrash/p/8640643.html
Copyright © 2011-2022 走看看