工厂方法模式

定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类

工厂方法的简单实现

(1)创建简单的产品接口

/**
* 创建产品接口
* @author Administrator
*
*/
interface Fruit{
//产品的共性方法
public void productMethod();
}

(2)创建具体的产品实现类

/**
* 创建产品类
* @author Administrator
*
*/
class Apple implements Fruit{
/**
* 产品方法的具体实现
*/
@Override
public void productMethod()
{
System.out.println("apple");
} }
/**
* 创建产品类
* @author Administrator
*
*/
class Banana implements Fruit{
/**
* 产品方法的具体实现
*/
@Override
public void productMethod()
{
System.out.println("banana");
} }

(3)创建工厂接口

/**
* 工厂接口
* @author Administrator
*
*/
interface FruitFactory{
/**
* 生产产品
* @return
*/
public Fruit createProduct(String type);
}

(4)创建具体的工厂

/**
* 具体的工厂类
* @author Administrator
*
*/
class SouthFactory implements FruitFactory
{
/**
* 生产产品
*/
@Override
public Fruit createProduct(String type)
{
Fruit fruit= null;
if("apple".equals(type))
{
fruit=new Apple();
}
else if("banana".equals(type))
{
fruit=new Banana();
}
return fruit;
}
}
/**
* 具体的工厂类
* @author Administrator
*
*/
class NorthFactory implements FruitFactory
{
/**
* 生产产品
*/
@Override
public Fruit createProduct(String type)
{
Fruit fruit= null;
if("apple".equals(type))
{
fruit=new Apple();
}
else if("banana".equals(type))
{
fruit=new Banana();
}
return fruit; }
}

(5)模拟客户端的实现

/**
* 模拟客户端
* @author Administrator
*
*/
public class Client{
public static void main(String[] args)
{
//创建工厂对象
FruitFactory factory =new SouthFactory();
//生产产品
Fruit product=factory.createProduct("apple");
//调用产品的方法
product.productMethod(); }
}

如果客户想得到一个南方的苹果,则需要告诉南方工厂,要一个苹果即可。

第一步:建立南方的工厂

第二步:有南方的工厂创建一个苹果

第三步:即可调用苹果中的产品了~

完整代码(完整代码中可以把这些类接口全放在一个java文件中,方便观察,当然,放在多个文件中也是可以的)

package com.songyan.designpattern;
/**
* 创建产品接口
* @author Administrator
*
*/
interface Fruit{
//产品的共性方法
public void productMethod();
} /**
* 创建产品类
* @author Administrator
*
*/
class Apple implements Fruit{
/**
* 产品方法的具体实现
*/
@Override
public void productMethod()
{
System.out.println("apple");
} } /**
* 创建产品类
* @author Administrator
*
*/
class Banana implements Fruit{
/**
* 产品方法的具体实现
*/
@Override
public void productMethod()
{
System.out.println("banana");
} } /**
* 工厂接口
* @author Administrator
*
*/
interface FruitFactory{
/**
* 生产产品
* @return
*/
public Fruit createProduct(String type);
} /**
* 具体的工厂类
* @author Administrator
*
*/
class SouthFactory implements FruitFactory
{
/**
* 生产产品
*/
@Override
public Fruit createProduct(String type)
{
Fruit fruit= null;
if("apple".equals(type))
{
fruit=new Apple();
}
else if("banana".equals(type))
{
fruit=new Banana();
}
return fruit;
}
} /**
* 具体的工厂类
* @author Administrator
*
*/
class NorthFactory implements FruitFactory
{
/**
* 生产产品
*/
@Override
public Fruit createProduct(String type)
{
Fruit fruit= null;
if("apple".equals(type))
{
fruit=new Apple();
}
else if("banana".equals(type))
{
fruit=new Banana();
}
return fruit; }
} /**
* 模拟客户端
* @author Administrator
*
*/
public class Client{
public static void main(String[] args)
{
//创建工厂对象
FruitFactory factory =new SouthFactory();
//生产产品
Fruit product=factory.createProduct("apple");
//调用产品的方法
product.productMethod(); }
}

FactoryMethod的更多相关文章

  1. 设计模式-工厂方法模式(FactoryMethod)

    简介: 简单工厂模式将类的示例化放在工厂对象中. 工厂方法模式是简单工厂模式的延伸,不同的是其将子类的实例化延迟到子类工厂中实现,本身仅定义一个创建对象的接口. 工厂方法模式主要由四部分组成: 1.抽 ...

  2. spring 之 factory-bean & factory-method

    这两者常常是一起出现的,或者说他们经常是一起被使用的.但是其实是分为了两种情况: 1 同时使用factory-bean 和 factory-method 如果,我们在一个bean 元素上同时配置 fa ...

  3. FactoryMethod工厂方法模式升级成AbstractFactory抽象工厂模式

    具体参考抽象工厂(AbstractFactory)模式-创建型模式,本文在FactoryMethod工厂方法模式(创建型模式)的基础上进行业务进一步抽象,不做详细原理介绍. 1.在FactoryMet ...

  4. FactoryMethod工厂方法模式(创建型模式)

    1.工厂方法模式解决的问题 现在有一个抽象的游戏设施建造系统,负责构建一个现代风格和古典风格的房屋和道路. 前提:抽象变化较慢,实现变化较快(不稳定) 整个抽象的游戏设施建造系统相对变化较慢,本例中只 ...

  5. 设计模式之工厂方法(FactoryMethod)模式

    在五大设计原则的基础上经过GOF(四人组)的总结,得出了23种经典设计模式,其中分为三大类:创建型(5种).结构型(7种).行为型(11种).今天对创建型中的工厂方法(FactoryMethod)模式 ...

  6. [sping]xml配置文件中factory-bean与factory-method(spring使用工厂方法注入bean)

    public class CarFactory { //非静态方法 public Car createCar(){ Car car = new Car(); car.setBrand("BM ...

  7. spring几种依赖注入方式以及ref-local/bean,factory-bean,factory-method区别联系

    平常的java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提出了依赖注入的思想,即依赖类不由程 ...

  8. spring中bean标签factory-method和factory-bean)详解工厂方法(factory-method和factory-bean)

    转自:http://blog.sina.com.cn/s/blog_6d3c1ec601019f3j.html A.factory-method The name of a factory metho ...

  9. 一天一个设计模式——工厂方法(FactoryMethod)模式

    一.模式说明 在前一个模板方法(Template Method)模式中,父类定义了处理流程,而流程中用到的方法交给子类去实现.类似的,在工厂方法模式中,父类决定如何生成实例,但并不决定所要生成的具体类 ...

  10. 工厂方法FactoryMethod 初步学习笔记

    一,意图   定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. 二,别名   虚构造器 Virtual Constructor 三,适用性 当一个类不知道它 ...

随机推荐

  1. luogu3375 【模板】KMP字符串匹配

    nxt数组下标从1开始而a,b数组下标从0开始. #include <iostream> #include <cstring> #include <cstdio> ...

  2. 相当牛X的java版星际游戏

    分享一款牛人用java写的经典游戏,目录结构如下: 虽然只能算一个Demo,但是用到了很多Java基础技术和算法: Java2D,双缓冲,A星寻路,粒子系统,动画效果,处理图片,Swing ui ,U ...

  3. 我给女朋友讲编程CSS系列(1) –添加CSS样式的3种方式及样式表的优先权

    如果说,原生态就是美,那么,我们就没有必要穿衣打扮. 网页是什么? 说白了,网页就是一堆[html标签]有序的搭配,让[CSS属性值]整整容,请[Javascript语言]处理一下事件. 一个人的整容 ...

  4. 对CRC32的小结加上bugku一道题目:好多压缩包

    CRC32就是校验值,一般来说不同的文件校验值不一样,所以我们可以挨个爆破,当然这是在文件比较小的时候.下面是几种情形. 1. 我新建了一个flag.txt文档,里面是我的生日20180818 然后我 ...

  5. java基础-流

    大致列一下这个周末需要学习的内容 1 容器 2 线程 3 流 (本节内容) 一. 流 按方向-------------输入流输出流 按处理数据单位-----字节流字符流 按功能------------ ...

  6. 学习RMQ-ST表

    RMQ一般是一个二维数组,用$dp[i][j]$表示起点为i开始连续数$2^j$个元素其中的最值,由于对于一个闭区间有:$R-L+1=len$因此也可以用另外一种记法:闭区间为$[i,i+2^j-1] ...

  7. Redis主从复制简单介绍

    由于本地环境的使用,所以搭建一个本地的Redis集群,本篇讲解Redis主从复制集群的搭建,使用的平台是Windows,搭建的思路和Linux上基本一致! (精读阅读本篇可能花费您15分钟,略读需5分 ...

  8. 简析JVM GC的根搜索算法

    根搜索算法的基本思路是通过一系列的“GC Roots”的对象作为起始点,从这些节点开始往下搜索,搜索的走过的路径称为引用链,当一个对象到“GC Roots”没有引用链可达时(也就是用图论的话说就是从G ...

  9. input输入框与元素间有间隙

    <div class="container"> <button>1</button> <button>2</button> ...

  10. 全球主要城市经纬度api

    原文发布时间为:2011-06-23 -- 来源于本人的百度文章 [由搬家工具导入] http://www.google.com/ig/cities?country=cn http://www.goo ...