zoukankan      html  css  js  c++  java
  • 工厂模式

    工厂模式

     

    工厂模式相当于创建对象的new。如A a=new A(). 工厂模式也是用来创建实例对象的,但它是面向接口编程,提高了代码的扩展性和维护性。

    例:这两天我太累了,想去按摩店按摩。每位技师都有不同的特长,我只需要告诉她我要什么服务,她就能帮忙实现,而不需要管具体是哪位技师。

    复制代码
    //创建对象的接口
    public interface Massage {
        //需要按摩服务
        public void massagist();
    }
    //工厂1
    class Massage1 implements Massage{
        @Override
        public void massagist() {
            System.out.println("7号技师为您泰式足底按摩90分钟");
        }
    }
    //工厂2
    class Massage2 implements Massage{
        @Override
        public void massagist() {
            System.out.println("13号技师为您精油推背90分钟");
        }
    }
    //工厂3
    class Massage3 implements Massage{
        @Override
        public void massagist() {
            System.out.println("27号技师为你前列腺按摩120分钟");
        }
    }
    复制代码

    测试类:

    复制代码
    //测试类
    public class Test {
    
        public static void main(String[] args) {
            Massage m1 = new Massage1();
            m1.massagist();
            
            Massage m2 = new Massage2();
            m2.massagist();
            
            Massage m3 = new Massage3();
            m3.massagist();
        }
    }
    
    
    
    =========================
    【控制台输出】
    
    
    7号技师为您泰式足底按摩90分钟
    13号技师为您精油推背90分钟
    27号技师为你前列腺按摩120分钟
    复制代码

     spring中工厂模式的实现

    复制代码
    // 创建bean工厂
    public interface BeanFactory {  
        Object getBean(String id) throws ExecutionException;
    }
    
    // Bean工厂的实现类
    public class ClassPathXmlApplicationContext implements BeanFactory {
        
        private Map<String, Object> map = new HashMap<String, Object>();
        
        @SuppressWarnings("unchecked")
        public ClassPathXmlApplicationContext(String fileName) throws DocumentException, InstantiationException, IllegalAccessException, ClassNotFoundException {
            
             //加载配置文件
             SAXReader reader = new SAXReader(); 
             Document document = reader.read(ClassPathXmlApplicationContext.class.getClassLoader().getResourceAsStream(fileName));
             
             //获取根节点
             Element root = document.getRootElement(); 
             //获取子节点
             List<Element> childElements = root.elements();
             
             for (Element element : childElements) {
                 map.put(element.attributeValue("id"), Class.forName(element.attributeValue("class")).newInstance());
             }
        }
    
        @Override
        public Object getBean(String id) throws ExecutionException {
            return map.get(id);
        }
    
    }
    复制代码
  • 相关阅读:
    C# 动态生成word文档
    C# 利用SharpZipLib生成压缩包
    C# 程序异常关闭时的捕获
    轻松学习UML之用例图,时序图
    轻松学习UML之类图,状态图
    C# 一款属于自己的音乐播放器
    C# MessageBox自动关闭
    C# 用户控件之温度计
    Html富文本编辑器
    java工作流引擎证照库类型的流程设计 实现方案与演示案例
  • 原文地址:https://www.cnblogs.com/wangchao422/p/9484265.html
Copyright © 2011-2022 走看看