zoukankan      html  css  js  c++  java
  • (1)java设计模式之简单工厂模式

    一:简单工厂模式的优点

              --->在阎宏博士的《JAVA与模式》一书中开头是这样描述简单工厂模式的:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。

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

    二:简单工厂模式的缺点

      这个工厂类集中了所以的创建逻辑,当有复杂的多层次等级结构时,所有的业务逻辑都在这个工厂类中实现。什么时候它不能工作了,整个系统都会受到影响。



    三:简单工厂模式的代码示例


    案例:登陆页面有多种登陆方式,一个工厂类,生成不同方式登陆的对象。

    登陆接口

     1 package com.yeepay.sxf.interfaces;
     2 
     3 /**
     4  * 登陆接口
     5  * @author sxf
     6  *
     7  */
     8 public interface Login {
     9 
    10     /**
    11      * 登陆方法
    12      * @param username
    13      * @param passwd
    14      * @return
    15      */
    16     public boolean goLogin(String username,String passwd);
    17 }
    View Code

    qq登陆

     1 package com.yeepay.sxf.interfaces.impl;
     2 
     3 import com.yeepay.sxf.interfaces.Login;
     4 /**
     5  * qq号登陆
     6  * @author sxf
     7  *
     8  */
     9 public class Qlogin implements Login{
    10 
    11     @Override
    12     public boolean goLogin(String username, String passwd) {
    13         //利用qq帐号密码登陆
    14         return false;
    15     }
    16 
    17     
    18 }
    View Code
    微博登陆
     1 package com.yeepay.sxf.interfaces.impl;
     2 
     3 import com.yeepay.sxf.interfaces.Login;
     4 /**
     5  * 微博登陆
     6  * @author sxf
     7  *
     8  */
     9 public class WeiboLogin implements Login {
    10 
    11     @Override
    12     public boolean goLogin(String username, String passwd) {
    13         //利用微博帐号登陆
    14         return false;
    15     }
    16 
    17     
    18 }
    View Code

    登陆方式工厂

     1 package com.yeepay.sxf.interfaces.impl;
     2 
     3 import com.yeepay.sxf.interfaces.Login;
     4 /**
     5  * 登陆方式的工厂类
     6  * @author sxf
     7  *
     8  */
     9 public class LoginFactory {
    10     public static Login createLogin(String fn){
    11         if("qq".equals(fn)){
    12             return new Qlogin();
    13         }else if("weibo".equals(fn)){
    14             return new WeiboLogin();
    15         }else{
    16             return null;
    17         }
    18     }
    19 }
    View Code

    模拟场景测试

     1 package com.yeepay.sxf.test;
     2 
     3 import com.yeepay.sxf.interfaces.Login;
     4 import com.yeepay.sxf.interfaces.impl.LoginFactory;
     5 
     6 public class Test {
     7 
     8     public static void main(String[] args) {
     9         //前台提交用户名和密码,以及登陆方式
    10         String username="290325337";
    11         String password="shangxiaofei";
    12         String fn="qq";
    13         
    14         //后台通过登陆方式获取合适的登陆bean
    15         Login login=LoginFactory.createLogin(fn);
    16         
    17         //进行登陆
    18         boolean flag=login.goLogin(username, password);
    19         
    20         //判断登陆成功或失败
    21         if(flag){
    22             //登陆成功
    23         }else{
    24             //登陆失败
    25         }
    26         
    27         
    28     }
    29     
    30     
    31 }
    View Code
  • 相关阅读:
    CSS3实现翻转菜单效果
    C语言根据日期取其位于一年中的第几天
    实习第一周小记------生活不易
    [置顶] iOS开发规范
    理解 Neutorn LBaaS
    FWaaS 实践: 允许 ssh
    实践 Neutron FWaaS
    理解 Neutron FWaaS
    应用新安全组
    Neutron 默认安全组规则
  • 原文地址:https://www.cnblogs.com/shangxiaofei/p/4611453.html
Copyright © 2011-2022 走看看