JAVA语言设计模式之简单工厂模式讲解
小标 2018-07-13 来源 : 阅读 1119 评论 0

摘要:本文主要向大家介绍了JAVA语言设计模式之简单工厂模式讲解,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。

本文主要向大家介绍了JAVA语言设计模式之简单工厂模式讲解,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。

简单工厂模式的概念

  就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。

简单工厂模式的UML图

  

简单工厂模式代码

  学习简单工厂模式的时候我用的是一个与人类有相关的例子。人类在世界分为男人和女人,首先定义一个Human产品的抽象接口

 

/**

 * This is factory patter package

 */package com.roc.factory;

/**

 * 产品的抽象接口  人类

 * @author liaowp

 *

 */public interface Human {

    

    public void say();

 

}

 

然后定义男人和女人,同样都有说话的方法。

 

/**

 * This is factory patter package

 */package com.roc.factory;

/**

 * man  男人

 * @author liaowp

 *

 */public class Man implements Human {

 

    /* say method

     * @see com.roc.factory.Human#say()

     */

    @Override

    public void say() {

        System.out.println("男人");

    }

 

}

 

 

/**

 * This is factory patter package

 */package com.roc.factory;

/**女人

 * @author liaowp

 *

 */public class Woman implements Human {

 

    /* say method

     * @see com.roc.factory.Human#say()

     */

    @Override

    public void say() {

        System.out.println("女人");

    }

 

}

 

最后写一个工厂类,用来创造男人和女人。第一种方式是使用逻辑判断的方式实现的。

 

package com.roc.factory;/**

 * 简单工厂

 * @author liaowp

 *

 */public class SampleFactory {

    public static Human makeHuman(String type){

        if(type.equals("man")){

            Human man = new Man();

            return man;

        }else if(type.equals("womman")){

            Human woman = new Woman();

            return woman;

        }else{

            System.out.println("生产不出来");

            return null;

        }            

    }

}

 

第二方式是使用java的放射实现的,我觉得这一类的实现方式比较好。

 

package com.roc.factory;/**

 * 简单工厂放射实现

 * @author liaowp

 *

 */public class SampleFactory1 {

    public static Human makeHuman(Class c){

        Human human = null;

        try {

            human = (Human) Class.forName(c.getName()).newInstance();

        } catch (InstantiationException e) {

            // TODO Auto-generated catch block

            System.out.println("不支持抽象类或接口");

            e.printStackTrace();

        } catch (IllegalAccessException e) {

            // TODO Auto-generated catch block            e.printStackTrace();

            System.out.println("没有足够权限,即不能访问私有对象");

        } catch (ClassNotFoundException e) {

            // TODO Auto-generated catch block

            System.out.println("类不存在");

            e.printStackTrace();

        }    

        return human;

    }

}

 

最后是客户端的代码

 

package com.roc.factory;/**

 * 简单工厂测试

 * @author liaowp

 *

 */public class Client {

    public static void main(String[] args) {//        Human man = SampleFactory.makeHuman("man");//        man.say();//        Human womman = SampleFactory.makeHuman("womman");//        womman.say();//        Human test = SampleFactory.makeHuman("tttt");        

        Human man = SampleFactory1.makeHuman(Man.class);

        man.say();

        Human woman = SampleFactory1.makeHuman(Woman.class);

        woman.say();

    }

}

 

 简单工厂模式应用场景 

  优点:工厂类是整个模式的关键.包含了必要的逻辑判断,根据外界给定的信息,决定究竟应该创建哪个具体类的对象.通过使用工厂类,外界可以从直接创建具体产品对象的尴尬局面摆脱出来,仅仅需要负责“消费”对象就可以了。而不必管这些对象究竟如何创建及如何组织的.明确了各自的职责和权利,有利于整个软件体系结构的优化。

     缺点:由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则,将全部创建逻辑集中到了一个工厂类中;它所能创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类了。当系统中的具体产品类不断增多时候,可能会出现要求工厂类根据不同条件创建不同实例的需求.这种对条件的判断和对具体产品类型的判断交错在一起,很难避免模块功能的蔓延,对系统的维护和扩展非常不利;

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注编程语言JAVA频道!


本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程