1、简单工厂模式(静态工厂方法模式)

抽象实例:

public interface People {
void talk();
}

具体实例:

public class Doctor implements People {
public void talk() {
System.out.println("我是医生");
}
}
public class Teacher implements People {
public void talk() {
System.out.println("我是教师");
}
}

具体工厂

public class Factory {
public static People createInstance(String flag){
if("doctor".equals(flag)){
return new Doctor();
}
if("teacher".equals(flag)){
return new Teacher();
}
return null;
}
}

测试类:

public class Test {
public static void main(String[] args){
People people = Factory.createInstance("doctor");
people.talk();
people = Factory.createInstance("teacher");
people.talk();
}
}
我是医生
我是教师

该模式的缺点:增加 具体实例  需要修改工厂类

2、工厂方法模式

抽象实例:

public interface People {
void talk();
}

具体实例:

public class Doctor implements People {
public void talk() {
System.out.println("我是医生");
}
}
public class Teacher implements People {
public void talk() {
System.out.println("我是教师");
}
}

抽象工厂

public abstract class AbstractFactory {
abstract People createInstance();
}

具体工厂

public class DoctorFactory extends AbstractFactory {
People createInstance() {
return new Doctor();
}
}
public class TeacherFactory extends AbstractFactory {
People createInstance() {
return new Teacher();
}
}

测试类:

public class Test {
public static void main(String[] args){
AbstractFactory doctorFactory = new DoctorFactory();
AbstractFactory teacherFactory = new TeacherFactory();
doctorFactory.createInstance().talk();
teacherFactory.createInstance().talk();
}
}
我是医生
我是教师

该模式的相对于 简单工厂模式 来说,如果要增加新的 具体实例  不需要修改原来的工厂方法,只需要新增一个 具体工厂。缺点就是当 具体实例 很多的时候,会增加很多与之对应的 具体工厂

3、抽象工厂模式

抽象实例和具体实例和前面的一样,此处省略不写

抽象工厂

public interface AbstractFactory {
People createDoctorInstance();
People createTeacherInstance();
}

具体工厂

public class ConcreteFactory  implements AbstractFactory {

    public People createDoctorInstance() {
return new Doctor();
} public People createTeacherInstance() {
return new Teacher();
}
}

测试类:

public class Test {
public static void main(String[] args){
AbstractFactory doctorFactory = new ConcreteFactory();
doctorFactory.createDoctorInstance().talk();
doctorFactory.createTeacherInstance().talk();
}
}
我是医生
我是教师

该模式缺点和简单工厂模式一样:增加 具体实例 需要修改 工厂类。

4、工厂模式与反射结合,实现新增 具体实例 不需要修改和新增 工厂类

抽象实例和具体实例和前面的一样,此处省略不写

具体工厂

public class ReflectFactory {
public People createInstance(String className) throws Exception {
Class<?> cls = Class.forName(className);
People people = (People) cls.newInstance();
return people;
}
}

测试类:

public class Test {
public static void main(String[] args) throws Exception {
ReflectFactory reflectFactory = new ReflectFactory();
reflectFactory.createInstance("factory.demo.Doctor").talk();
reflectFactory.createInstance("factory.demo.Teacher").talk();
}
}
我是医生
我是教师

java常用设计模式二:工厂模式的更多相关文章

  1. Java常见设计模式之工厂模式

    工厂模式在我们日常的应用中应当算是比较广泛的一种设计模式了.今天让我们一起来学习一下,工厂的设计模式. 工厂模式在<Java与模式>中分为三类:     1)简单工厂模式(Simple F ...

  2. Java设计模式02:常用设计模式之工厂模式(创建型模式)

    一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的.  工厂模式在<Java与模式>中分为三类: 1)简单工厂模式(Simple Fact ...

  3. java常用设计模式总览

    一.java的设计模式大体上分为三大类: 创建型模式(5种):工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式. 结构型模式(7种):适配器模式,装饰器模式,代理模式,外观模式,桥接模式,组 ...

  4. JAVA常用设计模式(一、单例模式、工厂模式)

    JAVA设计模式之单例模式 import java.util.HashMap; import java.util.Map; /** * 设计模式之单例模式 * 单例模式(Singleton Patte ...

  5. Java 设计模式之工厂模式(二)

    原文地址:Java 设计模式之工厂模式(二) 博客地址:http://www.extlight.com 一.背景 本篇内容是 Java 设计模式创建型模式的第二篇.上一篇主题为 <Java 设计 ...

  6. 浅析JAVA设计模式之工厂模式(二)

    1 工厂方法模式简单介绍 工厂方法 (Factroy Method)模式:又称多态性工厂模式(Polymorphic Factory),在这样的模式中,核心工厂不再是一个详细的类.而是一个抽象工厂,提 ...

  7. 浅析JAVA设计模式之工厂模式(一)

    1 工厂模式简单介绍 工厂模式的定义:简单地说,用来实例化对象,取代new操作. 工厂模式专门负责将大量有共同接口的类实例化.工作模式能够动态决定将哪一个类实例化.不用先知道每次要实例化哪一个类. 工 ...

  8. Java设计模式之工厂模式(Factory模式)介绍(转载)

    原文见:http://www.jb51.net/article/62068.htm 这篇文章主要介绍了Java设计模式之工厂模式(Factory模式)介绍,本文讲解了为何使用工厂模式.工厂方法.抽象工 ...

  9. 设计模式——抽象工厂模式及java实现

    设计模式--抽象工厂模式及java实现 设计模式在大型软件工程中很重要,软件工程中采用了优秀的设计模式有利于代码维护,方便日后更改和添加功能. 设计模式有很多,而且也随着时间在不断增多,其中最著名的是 ...

随机推荐

  1. Django的rest_framework的序列化组件之serializers.ModelSerializer介绍

    这里的介绍的serializers.ModelSerializer就和我们之前学习的modelform一样 serializers.ModelSerializer如下几个功能 1.序列化queryse ...

  2. python之集合【set】

    初学python,今天晚上学习了set,做下set的总结,set的中文名也就是[集合],set的总结分为两部分,第一部分是set的创建,第二部分是set的操作,也就是set的功能:set的特点是无序的 ...

  3. eclipse Mars4.5.2安装fatjar

    试了在eclipse下添加plugins的方法,但是并没有生效 最后看了一篇博客@参考博客 原文转载: 首先声明,eclipse luna 和mars 楼主亲测可用. .安装Eclipse2.0版本的 ...

  4. 使用IntelliJ IDEA 搭建 spring mvc开发环境

    填好GroupId.ArtifactId,一路Next创建工程,在main 目录创建 java文件夹并转换为Sources Root,创建好工程目录结构如下: 配置工程 配置 pom.xml,引入相关 ...

  5. Django xadmin 根据登录用户过滤数据

    在adminx.py文件对应的的class中添加如下代码: def queryset(self): qs = super(taskAdmin, self).queryset() if self.req ...

  6. linux命令学习之:route

    我们在网络基础的时候谈过关于路由的问题,两台主机之间一定要有路由才能够互通TCP/IP的协议,否则就无法进行联机.一般来说,只要有网络接口,该接口就会产生一个路由,例如:eth0及lo. route命 ...

  7. tomcat配置的环境变量catalina.home和catalina.base 区别

    本篇文章原创地址为:http://blog.csdn.net/you23hai45/article/details/27726147 这两个属性仅在你需要安装多个Tomcat实例而不想安装多个软件备份 ...

  8. 有关https有的网站可以访问有的访问不了的问题

    在开发中遇到这种情况,在开发工具里面访问可以,当时到了手机上之后就发现有的请求可以正常获取数据,有的则不行. 都是使用https地址,也配置后台了,但是就是不出数据,总是无法请求服务. 后来检查在手机 ...

  9. linux修改hosts

    vim /etc/hosts

  10. JavaScript 字符串用于存储和处理文本

    JavaScript 字符串用于存储和处理文本 var string_value='dasfsdfsd'; 注意:字符串利用索引精确定位取值 var character=string_value[7] ...