• 工厂模式


    工厂模式

     

    工厂模式相当于创建对象的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);
        }
    
    }
    复制代码
  • 相关阅读:
    three.js 加载外部模型的几种方法及格式
    使用httpserver开启一个本地服务器
    C#入门经典第4版 19章web编程基础 19.1~19.5代码(1)——default.aspx default.aspx.cs
    C#入门经典第4版 19章web编程基础 19.1~19.5代码(2)——ResultPage.aspx ResultPage.aspx.cs RegistrationInformation.cs
    Raspberry 刻录后首次登录配置
    禁止Chrome自动转换域名HTTP到HTTPS
    [Cnoi 2021]
    web前端的学习03
    web前端的学习01
    web前端的学习06
  • 原文地址:https://www.cnblogs.com/wangchao422/p/9484265.html
Copyright © 2020-2023  润新知