设计模式(四)_简单工厂模式-阿里云开发者社区

开发者社区> 开发与运维> 正文
登录阅读全文

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

简介: 废话不多说,继续学习设计模式的简单工厂模式 简单工厂模式是类的创建模式,又叫静态工厂方法模式。简单工厂模式是由一个工厂对象决定创建哪种产品类实例 使用场景 假如一个应用系统有多种登录方式,比如:用户密码登录、第三方账号登录。

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

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

使用场景

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

下面我针对登录场景,画了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;
    }
}

3) 工厂类

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("没有找到对应的登录类型");
        }
    }
}

4) 测试

    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

学习不是要么0分,要么100分的。80分是收获;60分是收获;20分也是收获。有收获最重要。但是因为着眼于自己的不完美,最终放弃了,那就是彻底的0分了。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章