java设计模式之简单工厂模式

来源:互联网 发布:淘宝网登陆首页登录 编辑:程序博客网 时间:2024/05/17 22:31

简单工厂模式的概念

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

简单工厂模式代码

  学习简单工厂模式的时候我用的是一个与人类有相关的例子。人类在世界分为男人和女人,首先定义一个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();    }}

简单工厂模式应用场景 

  优点:工厂类是整个模式的关键.包含了必要的逻辑判断,根据外界给定的信息,决定究竟应该创建哪个具体类的对象.通过使用工厂类,外界可以从直接创建具体产品对象的尴尬局面摆脱出来,仅仅需要负责“消费”对象就可以了。而不必管这些对象究竟如何创建及如何组织的.明确了各自的职责和权利,有利于整个软件体系结构的优化。
     缺点:由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则,将全部创建逻辑集中到了一个工厂类中;它所能创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类了。当系统中的具体产品类不断增多时候,可能会出现要求工厂类根据不同条件创建不同实例的需求.这种对条件的判断和对具体产品类型的判断交错在一起,很难避免模块功能的蔓延,对系统的维护和扩展非常不利;


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 a1驾照扣3分怎么办 a1驾照扣12分怎么办 吃了毓婷哺乳了怎么办 吃了毓婷后出血怎么办 吃金毓婷喝了水怎么办 白带浓稠浆糊样怎么办 驾校学费不给退怎么办 b1驾证扣了9分怎么办 机动车登记证丢了怎么办 b1驾照扣了9分怎么办 听力正常体检不过关怎么办 做完人流第二天同房了怎么办 医院的票据丢了怎么办 体检人体成分(脂肪缺乏)该怎么办 诊断出右下叶肺炎怎么办 做胸透穿钢圈内衣怎么办 预约不上留学体检怎么办 跨省离职后社保怎么办 开车到成都限号怎么办 月经量多怎么办吃什么 报驾校体检视力不达标怎么办 换驾驶证c1一只眼不合格怎么办 考驾照紧张腿抖怎么办 驾照该换了色弱怎么办 怀孕5个月感冒咳嗽怎么办 怀孕4个月喉咙痛怎么办 怀孕5个多月总是咳嗽尿失禁怎么办 怀孕7个月感冒了怎么办 怀孕7个月感冒喉咙痛怎么办 孕38周感冒咳嗽喉咙痛怎么办 嗓子痛咳嗽有痰怎么办 怀孕6个月了咳嗽怎么办 怀孕了咳嗽黄痰怎么办 科二5次没考过怎么办 交警开的罚单丢了怎么办 驾驶员从业资格证被水洗了怎么办 驾照考五次没过怎么办 学车每次考不过怎么办 年检超期3个月怎么办 年检超过3个月怎么办 工商执照年检时候忘记密码怎么办