工厂方法模式

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

工厂方法的简单实现

(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. jni 调用

    Event 0 on null Unexpected event 0 on /storage/emulated/0/Books/null

  2. idea 占用内存优化调整

      idea 占用内存优化调整 https://www.cnblogs.com/metoy/p/5967696.html   https://blog.csdn.net/zdxxinlang/arti ...

  3. python 学习分享-实战篇选课系统

    # 角色:学校.学员.课程.讲师 # 要求: # 1. 创建北京.上海 2 所学校 # 2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开 # ...

  4. python 令人抓狂的编码问题

    #运行以下程序: #! /usr/bin/env python#coding=utf-8 file = open( 'all_hanzi.txt','wb' ) listhz = []n=0for c ...

  5. pip更新产生的问题及其解决方法?

    运行 pip3 install --upgrade pip 发生错误: from pip import main ImportError: cannot import name 'main' 将以下代 ...

  6. Unity --yield return

    1.yield return null; //暂停协同程序,下一帧再继续往下执行 yield new WaitForFixedUpdate (); //暂停协同程序,等到下一次调用FixedUpdat ...

  7. 【bzoj2245】[SDOI2011]工作安排 费用流

    题目描述 你的公司接到了一批订单.订单要求你的公司提供n类产品,产品被编号为1~n,其中第i类产品共需要Ci件.公司共有m名员工,员工被编号为1~m员工能够制造的产品种类有所区别.一件产品必须完整地由 ...

  8. 论文笔记《Notes on convolutional neural networks》

    这是个06年的老文章了,但是很多地方还是值得看一看的. 一.概要 主要讲了CNN的Feedforward Pass和 Backpropagation Pass,关键是卷积层和polling层的BP推导 ...

  9. javaScript 笔记(5) --- jQuery(上)

    这节整理整理 iquery.js 相关的内容... 目录 --- jQuery 语法 --- 文档就绪事件 --- jQuery 选择器 --- jQuery 事件 --- jQuery 效果 jQu ...

  10. 最长k可重区间集(cogs 743)

    «问题描述:«编程任务:对于给定的开区间集合I和正整数k,计算开区间集合I的最长k可重区间集的长度.«数据输入:由文件interv.in提供输入数据.文件的第1 行有2 个正整数n和k,分别表示开区间 ...