• 设计模式(四)_简单工厂模式


    废话不多说,继续学习设计模式的简单工厂模式

    简单工厂模式是类的创建模式,又叫静态工厂方法模式。简单工厂模式是由一个工厂对象决定创建哪种产品类实例

    使用场景

    假如一个应用系统有多种登录方式,比如:用户密码登录、第三方账号登录。那自然建立一个各种登录方式都使用的接口。

    下面我针对登录场景,画了uml图
    enter image description here

    具体代码

    1. 接口
    public interface Login {
    
        public boolean verify(String name,String password);
    }
    
    

    2)登录方式的实现

    public class DomainLogin implements Login{
        @Override
        public boolean verify(String name, String password) {
            //TODO
            /**
             * 业务逻辑
             */
            return true;
        }
    }
    
    
    public class PasswordLogin implements Login{
        @Override
        public boolean verify(String name, String password) {
    
            //TODO
            /**
             * 业务逻辑
             */
    
            return true;
        }
    }
    
    1. 工厂类
    public class LoginFactory {
    
        public static Login factory(String type){
            if(type.equals("passwordLogin")){
                return new PasswordLogin();
            }else if(type.equals("domainLogin")){
                return new DomainLogin();
            }else {
                throw  new RuntimeException("没有找到对应的登录类型");
            }
        }
    }
    
    1. 测试
        public static void main(String[] args) {
            String type = "passwordLogin";
    
            String name = "name";
    
            String password = "password";
    
            Login login = LoginFactory.factory(type);
    
            Boolean bool =  login.verify(name,password);
            if(bool){
                //业务逻辑
            }else{
                //业务逻辑
            }
        }
    

    优点

    模式的核心是工厂类,这个类有必要的逻辑判断,可以决定什么时候创建哪种登录实例。而调用者可以免除直接创建对象的责任。简单工厂模式实现了对责任的分割,当系统引入新的登录方式时调用者无需修改。

    缺点

    工厂类集中了所有的业务逻辑。当有复杂的多层级等级结构时,逻辑 都在这个工厂类中实现。这个工厂类不工作了,整个系统就受到影响。

    所有设计模式的代码已经放到github上。

    参考:http://www.cnblogs.com/java-my-life/archive/2012/03/22/2412308.html

  • 相关阅读:
    bzoj 3339 莫队
    E. XOR and Favorite Number
    HDU 2222 AC自动机
    SPOJ 694 不同子串个数
    Codeforces Round #428 (Div. 2)
    HDU 6103
    《贪婪的动态规划》
    《浅谈图论模型的建立与应用》
    bzoj 2194 快速傅里叶之二
    java中高级面试题整理及参考答案
  • 原文地址:https://www.cnblogs.com/zhenghengbin/p/9221033.html
Copyright © 2020-2023  润新知