关于工厂模式的想法

工厂模式分为:静态工厂、工厂方法、抽象工厂。

工厂模式好处(我想到的):

1、对象统一管理,重复使用,修改方便(改一处,多处同时改动)

2、对象的产生和使用分离(客户不关心创建的细节,只关心如何使用”单一职责链原则”)

以前看静态工厂方法大部分是这样的(这里主要不研究工厂模式)

public class FactoryDemo{
    public static Person createPerson(String typeName){
        if(typeName.equals("student")){
            return  new Student();
        }else if(typeName.equals("teacher")){
            return  new Teacher();
        }
    }
}

但是我就在想,如果Person接口的实现类非常多,那么这个工厂不是显得十分臃肿吗?

工厂模式有解决的方法(这里不多说),我只说当时我的一些想法,这里传的参数都是变化的,我能传不变的参数进来吗?

于是想到了反射,于是我做如下修改:

public class PersonFactory{
    public static Person createPerson(Class demo) throws Exception{
        if(Person.class.isAssignableFrom(demo)){
            Person p = (Person)demo.newInstance();
            return p;
        }else{
            throw new RuntimeException("该工厂无法生产非Person接口实现类");
        }

    }
}

这样的话这个工厂就不需要变化

如果要获得Student对象,只需要调用PersonFactory.createPerson(Student.class)即可

如果要获得Teacher对象,只需要调用PersonFactory.createPerson(Teacher.class)即可

时间: 2024-11-20 09:59:35

关于工厂模式的想法的相关文章

23种设计模式--工厂模式-Factory Pattern

一.工厂模式的介绍       工厂模式让我们相到的就是工厂,那么生活中的工厂是生产产品的,在代码中的工厂是生产实例的,在直白一点就是生产实例的类,代码中我们常用new关键字,那么这个new出来的实例就就依赖与这个类,2者之间的耦合度就高,此时我们就可以使用面向对象的去解决这个问题,将变化点封装起来,这就是我们将要首先引入的简单工厂模式:先来说一个场景,比如我们吃水果这个例子吧,我们有时候想吃苹果,有时候想吃橘子,但是每次都需要去买这些水果,后来有个水果店,又卖橘子,又卖苹果,这个水果店就当于简

初识工厂模式

对于一个Java初学者来说,当你听到工厂模式时会一脸的懵逼,好奇心驱使你去百度.结果看了看,感觉还是看不懂,百度上面的文章好多都是你复制我的,我复制你的,结合我的所学和自己的想法,想在此写一下我个人的认识. 工厂模式,顾名思义就是有一个工厂,然后按照客户的要求去生产一些满足客户要求的东西.我们知道,要是单纯用new去实例化一个对象,那么这个对象就很大程度上面依赖与你具体要生产什么东西,当客户不满足你编写的代码时,本来是生产奔驰,结果你的客户说他喜欢QQ,那么你就必须去满足老板的要求,你必须更改源

表驱动与工厂模式

关于表驱动 首次接触表驱动,还是在毕业不久之后.当时某部门经理给我们讲解重构,即<重构:改善既有代码的设计>一书中简化条件表达式部分,关于if语句的处理,将其替换为多态形式,例如说工厂模式.但是即使替换为工厂,switch或者if的判断依旧不能去除,那么有什么办法解决这个问题呢? 当时我还在研究STL源码,想到了traits编程技术,可以在编译期解决if的判断问题(虽然有这个想法,但是一直没有实现成功).各路大牛提出了不同的见解,大家基本上都同意一条:使用"表"来解决.当时

从接口、抽象类到工厂模式再到JVM来总结一些问题

俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习! 涉及到的知识点总结如下: 为什么使用接口? 接口和抽象类的区别 简单工厂模式总结 Java中new和newInstance的区别 Java的Class.forName(xxx); Java里创建对象的几个方式总结 Java类加载机制总结 Java WEB的三层架构和MVC的关系 工厂方法模式总结 抽象工厂模式总结 一道面试题的分析 一个服务提供者框架的学习 接口的另一常用法:策略模式 参考资料 先看这样一个场景:某个果园里现在有

关于工厂模式的一些反思

之前看了一些关于工厂模式和抽象工厂模式的资料,了解了工厂模式和抽象工厂模式的特点和区别.今天再回来看自己之前写的笔记,又开始迷惑了,下面把自己的一些迷惑和想法记录下来. 1.什么地方会用到简单工厂模式? 在很多开源库中都会出现跨平台的问题.假设有一个窗口模块(即为一个dll),该模块提供窗口的基本功能比如设置标题.设置窗口背景颜色等.在不同的平台里,创建窗口需要调用不同的API,比如windows平台,创建窗口可以调用MFC或者windows的API,在linux平台创建窗口则需要调用X11的A

设计模式(java)--简单工厂模式之女娲造人.水果农场

女娲抟土造人 话说:“天地开辟,未有人民,女娲抟土为人.”女娲需要用土造出一个个的人,但在女娲造出人之前,人的概念只存在于女娲的思想里面. 女娲造人,这就是简单工厂模式的应用.  首先,在这个造人的思想里面,有几个重要的角色:女娲本身.抽象的人的概念和女娲所造出的一个个具体的人.    1.)女娲是一个工厂类,也就是简单工厂模式的核心角色. 2.)具休的一个个的人,包括张三,李四等.这些人便是简单工厂模式里面的具体产品角色 3.)抽象的人是最早只存在于女娲的头脑里的一个想法,女娲按照这个想法造出

javascript的设计模式之抽象工厂模式

<script type="text/javascript">//上一个是我第一次在博客里写文章,这一次我又来了//上次是工厂模式的简单形式,这次是工厂模式的抽象版,什么是抽象呢,就不让人看着不好理解,但我尽量用好理解的方式写出来 //这是一个工厂的构造函数,里面有一个属性,属性的值是一个对象,对象里又有三个属性,分别代表了三种交通工具//好了其实这个也是一个抽象版的工厂构造函数,好比有人跟你吹牛逼说自己要建一个能造三种交通工具的厂子,但是具体怎么造,他不会了: funct

VO(DTO)存在的必要性,以及使用工厂模式+模版模式+自省实现可拓展VO

引子: 想起以前第一个项目的时候,使用springMvc+mybatis+restful实现一个论坛的网站,那个时候因为还不知道VO层的存在(因为一直使用MVC三层架构).为了不想重复写get,set方法(把po的数据封装到map或者新的bean),所以直接从数据库里面读取出来的po就直接封装成json反馈到前端,很多重要的数据字段如用户密码这些都直接抛给前端,数据泄漏了出去. 后来使用了数据库的视图方法,但是效果非常不好,视图的拓展性非常低,前端要求添加或者删除一个字段,都要从数据库底层开始改

[设计模式篇]工厂模式和抽象工厂模式

最近在看Head First的Design Pattern,想想去年候捷来学校给我们讲Design Pattern,但当时水平太弱根本听不懂,今年想趁机再好好学一波,候捷反而不来了,哎,人生就是这样,有些机会真的搞不好只有一次了,所以还是要多多珍惜,不然... ... (再水下去估计没人看了,废话少说,这篇就当一个开篇之作吧,虽然已经看了不少了.) Head First这本书用了一个披萨店的例子,从简单工厂(严格来说这不算一种Gof的设计模式,更像是一种编程习惯),到介绍工厂模式,再介绍到抽象工