当前位置 博文首页 > 文章内容

    表现层-业务层-持久层(工厂模式解耦-单列版)

    作者: 栏目:未分类 时间:2020-07-11 14:01:50

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



     

     

    package com.example.ui;
    
    import com.example.factory.BeanFactory;
    import com.example.service.IAccountService;
    
    /**
     * 模拟一个表现层,用于调用业务层
     */
    public class Client {
        public static void main(String[] args) {
            IAccountService as= (IAccountService) BeanFactory.getBean("accountService");
            as.saveAccount();
        }
    }
    package com.example.factory;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.Enumeration;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Properties;
    
    /**
     * 一个创建Bean对象的工厂
     *
     * Bean:在计算机英语中,有可重用组件的含义。
     * JavaBean:用java语言编写的可重用组件。
     *
     *              javabean > 实体类
     *
     * 他就是创建我们的service和dao对象的
     *
     * 第一个:需要一个配置文件来配置我们的service和dao
     *      配置的内容:唯一标识=全限定类名(key=value)
     * 第二个:通过读取配置文件中的内容,反射创建对象
     *
     * 我的配置文件可以是xml,也可以是properties
     */
    public class BeanFactory {
        //定义一个properties对象
        private static Properties props;
        //定义一个Map,用于存放我们要创建的对象,我们把它称之为容器
        private static Map<String,Object> beans;
        //使用静态代码块为Properties对象赋值
        private static boolean flag;
        static{
            //设置初始化状态为正在初始化
            flag=true;
            //实例化对象
            props=new Properties();
            //实例化容器
            beans=new HashMap<String,Object>();
            //获取properties对象的流对象
            InputStream in= BeanFactory.class.getClassLoader().getResourceAsStream("Bean.properties");
            try {
                props.load(in);
            } catch (IOException e) {
                throw new ExceptionInInitializerError("初始化properties失败");
            }
            //获取枚举对象
            Enumeration keys = props.keys();
            while(keys.hasMoreElements()){
                //获取bean对象的key
                String key = keys.nextElement().toString();
                //把bean对象放入beans容器中
                beans.put(key,getBean(key));
            }
            //设置初始化状态为已初始化
            flag=false;
        }
    
        /**
         * 根据bean的名称获取bean对象
         * @param beanName
         * @return
         */
        public static Object getBean(String beanName){
            Object bean= beans.get(beanName);
            //以下if语句解决初始化顺序带来的隐患,flag标识初始化中
            if(bean==null&&flag){
                String beanPath = props.getProperty(beanName);
                try {
                    bean = Class.forName(beanPath).newInstance();
                } catch (InstantiationException|IllegalAccessException|ClassNotFoundException e) {
                    e.printStackTrace();
                }
            }
            return bean;
        }
    }
    package com.example.service;
    
    /**
     * 账户业务层接口
     */
    public interface IAccountService {
    
        /**
         * 模拟保存账户
         */
        void saveAccount();
    }
    package com.example.service.impl;
    
    import com.example.factory.BeanFactory;
    import com.example.service.IAccountService;
    import com.example.dao.IAccountDao;
    
    /**
     * 账户的业务层实现类
     */
    public class AccountServiceImpl implements IAccountService {
    
        private IAccountDao accountDao= (IAccountDao) BeanFactory.getBean("accountDao");
    
        @Override
        public void saveAccount() {
            accountDao.saveAccount();
        }
    }
    package com.example.dao;
    
    /**
     * 账户的持久层接口
     */
    public interface IAccountDao {
    
        /**
         * 模拟保存账户
         */
        void saveAccount();
    }
    package com.example.dao.impl;
    
    import com.example.dao.IAccountDao;
    
    /**
     * 账户的持久层实现类
     */
    public class AccountDaoImpl implements IAccountDao {
        @Override
        public void saveAccount(){
            System.out.println("保存了账户");
        }
    }
    accountDao=com.example.dao.impl.AccountDaoImpl
    accountService=com.example.service.impl.AccountServiceImpl
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>org.example</groupId>
        <artifactId>learn</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <packaging>jar</packaging>
    
    
        <dependencies>
            <dependency>
                <groupId>com.h2database</groupId>
                <artifactId>h2</artifactId>
                <version>1.4.200</version>
            </dependency>
        </dependencies>
    
        <repositories>
            <repository>
                <id>alimaven</id>
                <name>aliyun maven</name>
                <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
                <releases>
                    <enabled>true</enabled>
                </releases>
                <snapshots>
                    <enabled>false</enabled>
                </snapshots>
            </repository>
        </repositories>
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <java.version>14</java.version>
            <maven.compiler.source>14</maven.compiler.source>
            <maven.compiler.target>14</maven.compiler.target>
            <encoding>UTF-8</encoding>
        </properties>
    </project>