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

    我们在使用Java代码处理某个问题的时候,需要创建A对象,调用      A对象中的某个方法,但是A对象的创建依赖B对象,而B对象的 创建又依赖于C对象,C对象的创建又依赖于D对象.....,如下:

    D d=new D();

    C c=new C(d);

    B b=new B(c);

    A a=new A(b);

    这样造成,代码的阅读性极差

    解决:

    将对象的创建过程进行封装,直接返回创建好的对象使用.

    实现:

    工厂设计模式

    本质:就是封装对象的创建过程的一种代码的编程思想

    静态工厂:生产对象的方法是静态方法

    public class AFactory{

    public static A newInstance(){

    D d=new D();

    C c=new C(d)

    B b=new B(c);

    A a=new A(b);

    return a;

    }

    }

    动态工厂:生产对象的方法是非静态方法

    public class AFactory{

    public A newInstance(){

    D d=new D();

    C c=new C(d)

    B b=new B(c);

    A a=new A(b);

    return a;

    }

    }

    SpringIOC使用工厂创建对象:

    传统方案:

    我们自己创建工厂,然后调用工厂生产对象的方法,获取生产的对象,然后使用生产的对象完成功能开发.

    IOC方案:

    Spring容器创建工厂,并自动调用其创建的工厂的生产对象的方法,生产的对象直接存储在Spring容器中,我们直接从Spring容器中获取对象,完成功能开发.

    ①动态工厂模式

    ②静态工厂模式

    applicationcontext.xml配置示例:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
        <!--创建student的bean对象-->
        <!--工厂设计模式-->
        <!--动态工厂-->
            <bean id="factory" class="com.bjsxt.pojo.StudentFactory"></bean>
            <!--生产Student对象-->
            <bean id="stu4" factory-bean="factory" factory-method="newIntance"></bean>
        <!--静态工厂-->
        <!--可以理解为静态方法直接用类名调用-->
            <bean id="stu5" class="com.bjsxt.pojo.StudentFactory2" factory-method="newIntance"></bean>
    </beans>
    

      

    package com.bjsxt.controller;
    
    import com.bjsxt.pojo.Student;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    /**
     * @author wuyw2020
     * @date 2020/1/8 15:16
     */
    public class testStu {
        
        public static void main(String[] args) {
            //创建容器对象
            ApplicationContext ac = new ClassPathXmlApplicationContext("applicationcontext.xml");
            //获取容器中的对象
            //工厂设计模式     
                //动态工厂
                Student student = (Student) ac.getBean("stu4");
                System.out.println("动态工厂:"+student);
                //静态工厂
                Student student1 = (Student) ac.getBean("stu5");
                System.out.println("静态工厂:"+student1);
        }
    }
    

      

  • 相关阅读:
    python内置的魔术命令(builtin magic commands)
    绘制ROC曲线
    python with语句中的变量有作用域吗?
    Visual Studio上编译ncnn
    loss函数学习笔记
    Install zeal on ubuntu16.04
    cmake方式使用vlfeat
    整理读研期间用过、改进过、写过的代码
    ubuntu下使用matplotlib绘图无法显示中文label
    error: each element of 'ext_modules' option must be an Extension instance or 2-tuple
  • 原文地址:https://www.cnblogs.com/vincentmax/p/14293763.html
Copyright © 2011-2022 走看看