java设计模式之工厂模式

java设计模式之工厂模式

虽然学习java也有一段时间,但是初看<< thinking in java >>还是有些吃力,其中的原因是里面的章节有许多设计模式,初看这些设计模式还不能完全深刻领悟其中的道理,于是我决定先简单了解一下java中的一些设计模式.由于本文内容包含自己思考的代码,并不能保证能原汁原味反映设计模式的思想.

工厂模式

1.介绍:工厂是一个用来创建其它对象的对象,它会根据传来的参数不同而创建不同的对象.
2.先看我的一些类/接口的定义:

    public interface Human {
        void say();
    }

    public class Girl implements Human {
        @Override
        public void say() {
            System.out.println("I am a girl");
        }
    }

    public class Boy implements Human {
        @Override
        public void say() {
            System.out.println("I am a boy");
        }
    }

3.示例A:我认为一种很蠢的方法(字符串参数)

    public class HumanFactory {
        public Human creat(String string){
            if (string.toLowerCase().equals("girl")) return new Girl();
            else if (string.toLowerCase().equals("boy")) return new Boy();
            return null;
        }
    }

它是根据判断传来的参数来生成不同的Human对象,先不说如果有N多对象create方法会变得很长不优雅,要是你打代码的时候犯困参数经常写错…无语吧.
4.实例B:利用一个类型标记来创建对象,这个思想在<< thinking in java >>中类型信息一章比较常见.

    public Human creat(Class<? extends Human> c){
        try {
            return c.getConstructor().newInstance();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        }
        return null;
    }

看上去简洁了一些,无论你的Human子类有多少个,你都不需要增加create的代码了,但是这必须保证你的Human子类必须有公共无参的构造函数.我想还是有一种没有毛病的的create方法的:

    public interface Generator<T> {
        T next();
    }

    public class GirlGenerator implements Generator<Girl> {
        @Override
        public Girl next() {
            // 你的生成方法
        }
    }

    public Human create(Generator<? extends Human> generator){
        return generator.next();
    }

这个时候你只需要定义自己的生成方法就可以了,虽然这中方法你每定义一个子类都需要实现Generator,但是可以将你的代码很好地分离,让你的create方法更加简单.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值