• 设计模式——抽象工厂模式(AbstractFactoryPattern)


    抽象工厂模式(AbstractFactory):提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。

    UML图:

    IFactory:

    package com.cnblog.clarck;
    
    public interface IFactory {
        IUser createUser();
        
        IDepartment createDepartment();
    }

    SqlserverFactory:

    package com.cnblog.clarck;
    
    public class SqlserverFactory implements IFactory {
    
        @Override
        public IUser createUser() {
            return new SqlserverUser();
        }
    
        @Override
        public IDepartment createDepartment() {
            return new SqlserverDepartment();
        }
    
    }
    AccessFactory:
    package com.cnblog.clarck;
    
    public class AccessFactory implements IFactory {
    
        @Override
        public IUser createUser() {
            return new AccessUser();
        }
    
        @Override
        public IDepartment createDepartment() {
            return new AccessDepartment();
        }
    
    }

    IUser:

    package com.cnblog.clarck;
    
    public interface IUser {
        void insert(User user);
        
        User getUser(int id);
    }

    AccessUser:

    package com.cnblog.clarck;
    
    public class AccessUser implements IUser {
        
        @Override
        public void insert(User user) {
            System.out.println("在Access中给User表增加一条记录");
        }
    
        @Override
        public User getUser(int id) {
            System.out.println("在Access中根据ID得到User表一条记录");
            return null;
        }
    
    }

    SqlserverUser:

    package com.cnblog.clarck;
    
    public class SqlserverUser implements IUser {
    
        @Override
        public void insert(User user) {
            System.out.println("在SQL Server中给User表增加一条记录");
        }
    
        @Override
        public User getUser(int id) {
            System.out.println("在SQL Server中根据ID得到User表一条记录");
            return null;
        }
    }

    IDepartment:

    package com.cnblog.clarck;
    
    /**
     * IDepartment 接口,用于客户端访问,解除与具体数据库访问的耦合
     * 
     * @author clarck
     * 
     */
    public interface IDepartment {
        public void insert(Department department);
    
        public Department getDepartment(int id);
    }

    AccessDepartment:

    package com.cnblog.clarck;
    
    public class AccessDepartment implements IDepartment {
    
        @Override
        public void insert(Department department) {
            System.out.println("在Access中给Department表增加一条记录");
        }
    
        @Override
        public Department getDepartment(int id) {
            System.out.println("在Access中根据ID得到Department表一条记录");
            return null;
        }
    
    }

    SqlserverDepartment:

    package com.cnblog.clarck;
    
    public class SqlserverDepartment implements IDepartment {
        
        @Override
        public void insert(Department department) {
            System.out.println("在SQL Server中给Department表添加一条记录");
        }
    
        @Override
        public Department getDepartment(int id) {
            System.out.println("在SQL Server中根据ID得到Department表的一条记录");
            return null;
        }
    
    }

    Department:

    package com.cnblog.clarck;
    
    public class Department {
        private int mID;
        private String mDeptName;
    
        public int getID() {
            return mID;
        }
    
        public void setID(int mID) {
            this.mID = mID;
        }
    
        public String getDeptName() {
            return mDeptName;
        }
    
        public void setDeptName(String mDeptName) {
            this.mDeptName = mDeptName;
        }
    
    }

    User:

    package com.cnblog.clarck;
    
    public class User {
        private int mID;
        private String mName;
    
        public int getID() {
            return mID;
        }
    
        public void setID(int mID) {
            this.mID = mID;
        }
    
        public String getName() {
            return mName;
        }
    
        public void setName(String mName) {
            this.mName = mName;
        }
    
    }

     Client:

    package com.cnblog.clarck;
    
    public class Client {
        public static void main(String[] args) {
            User user = new User();
            Department department = new Department();
            
            //IFactory factory = new SqlserverFactory();
            IFactory factory = new AccessFactory();
            
            IUser iu = factory.createUser();
            iu.insert(user);
            iu.getUser(1);
            
            IDepartment iDepartment = factory.createDepartment();
            iDepartment.insert(department);
            iDepartment.getDepartment(1);
        }
    }
  • 相关阅读:
    dal configure 源码分析
    dubbo源码
    mysql replace info 和 auto_increment可能产生的问题
    消息队列总结
    关于系统并发数和QPS的思考
    字符打印流及字节打印流使用
    oracle分组查询二,row_number() over()函数的使用
    oracle表函数使用table function
    Script:10g中显示Active Session Count by Wait Class
    剑指 Offer 61. 扑克牌中的顺子
  • 原文地址:https://www.cnblogs.com/tanlon/p/3451477.html
Copyright © 2020-2023  润新知