zoukankan      html  css  js  c++  java
  • Java 工厂模式登陆系统实现

    没有工厂模式

    设定一个登陆系统

    UserServiceImp.java

    public class UserServiceImp {
        public boolean login(String username, String pw) {
            if(username.equals("abc")&&pw.equals("123")){
                return true;
            }else{
                return false;
            }
        }
    }
    

    Test1.java

    import java.util.Scanner;
    public class Test1 {
    
        public static void main(String[] args) {
            UserServiceImp userServe = new UserServiceImp();
            Scanner scanner =  new Scanner(System.in);
            System.out.println("Please input username:");
            String uname = scanner.nextLine();
            System.out.println("Please input user password");
            String pw = scanner.nextLine();
            boolean rel =  userServe.login(uname, pw);
            System.out.println(rel==true?"Success!":"Falsed!");
        }
    }
    

    但是如果UserServiceImp.java没有写好,Test1.java就不可以调用,且修改比较麻烦。

    工厂模式

    简单工厂模式,分离调用者和实现者:

    建立一个interface: UserService.java

    public interface UserService {
        boolean login(String username, String password);
    }
    

    建立一个工厂: UserServiceFactory.java

    public class UserServiceFactory {
        public static UserService getUserService(){
            return new UserServiceImp();
        }
        
    }
    

    修改Test.java中的代码:

    UserService userServe = UserServiceFactory.getUserService();
    

    这样创建userServe对象的时候,就通过UserService 接口,和UserServiceFactorygetUserService()来间接创建了。

    修改被调用的类

    若有UserServiceImp2.java, 则只用修改facotry中的代码即可。

    即,创建UserServiceimp2.java

    public class UserServiceimp2 implements UserService{
    
        @Override
        public boolean login(String username, String password) {
            if (username.equals("aaa")&&password.equals("111")) {
                return true;
            } else {
                return false;
            }
        }
    
        
    }
    

    修改factory代码:

    return new UserServiceimp2();
    

    即可

  • 相关阅读:
    rsync用法详细解释
    配置本地yum仓库
    电脑硬件知识
    LVM逻辑卷管理
    前端文本截断
    程序员编写技术文档的新手指南
    JavaScript 是世界上最好的语言?
    一天只工作 3 小时的程序员,已坚持两年
    数据库水平切分方法
    MySQL 笔记整理(1) --基础架构,一条SQL查询语句如何执行
  • 原文地址:https://www.cnblogs.com/heenhui2016/p/10964268.html
Copyright © 2011-2022 走看看