FactoryMethod
工厂方法模式
定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类
工厂方法的简单实现
(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的更多相关文章
- 设计模式-工厂方法模式(FactoryMethod)
简介: 简单工厂模式将类的示例化放在工厂对象中. 工厂方法模式是简单工厂模式的延伸,不同的是其将子类的实例化延迟到子类工厂中实现,本身仅定义一个创建对象的接口. 工厂方法模式主要由四部分组成: 1.抽 ...
- spring 之 factory-bean & factory-method
这两者常常是一起出现的,或者说他们经常是一起被使用的.但是其实是分为了两种情况: 1 同时使用factory-bean 和 factory-method 如果,我们在一个bean 元素上同时配置 fa ...
- FactoryMethod工厂方法模式升级成AbstractFactory抽象工厂模式
具体参考抽象工厂(AbstractFactory)模式-创建型模式,本文在FactoryMethod工厂方法模式(创建型模式)的基础上进行业务进一步抽象,不做详细原理介绍. 1.在FactoryMet ...
- FactoryMethod工厂方法模式(创建型模式)
1.工厂方法模式解决的问题 现在有一个抽象的游戏设施建造系统,负责构建一个现代风格和古典风格的房屋和道路. 前提:抽象变化较慢,实现变化较快(不稳定) 整个抽象的游戏设施建造系统相对变化较慢,本例中只 ...
- 设计模式之工厂方法(FactoryMethod)模式
在五大设计原则的基础上经过GOF(四人组)的总结,得出了23种经典设计模式,其中分为三大类:创建型(5种).结构型(7种).行为型(11种).今天对创建型中的工厂方法(FactoryMethod)模式 ...
- [sping]xml配置文件中factory-bean与factory-method(spring使用工厂方法注入bean)
public class CarFactory { //非静态方法 public Car createCar(){ Car car = new Car(); car.setBrand("BM ...
- spring几种依赖注入方式以及ref-local/bean,factory-bean,factory-method区别联系
平常的java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提出了依赖注入的思想,即依赖类不由程 ...
- 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 ...
- 一天一个设计模式——工厂方法(FactoryMethod)模式
一.模式说明 在前一个模板方法(Template Method)模式中,父类定义了处理流程,而流程中用到的方法交给子类去实现.类似的,在工厂方法模式中,父类决定如何生成实例,但并不决定所要生成的具体类 ...
- 工厂方法FactoryMethod 初步学习笔记
一,意图 定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. 二,别名 虚构造器 Virtual Constructor 三,适用性 当一个类不知道它 ...
随机推荐
- jni 调用
Event 0 on null Unexpected event 0 on /storage/emulated/0/Books/null
- idea 占用内存优化调整
idea 占用内存优化调整 https://www.cnblogs.com/metoy/p/5967696.html https://blog.csdn.net/zdxxinlang/arti ...
- python 学习分享-实战篇选课系统
# 角色:学校.学员.课程.讲师 # 要求: # 1. 创建北京.上海 2 所学校 # 2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开 # ...
- python 令人抓狂的编码问题
#运行以下程序: #! /usr/bin/env python#coding=utf-8 file = open( 'all_hanzi.txt','wb' ) listhz = []n=0for c ...
- pip更新产生的问题及其解决方法?
运行 pip3 install --upgrade pip 发生错误: from pip import main ImportError: cannot import name 'main' 将以下代 ...
- Unity --yield return
1.yield return null; //暂停协同程序,下一帧再继续往下执行 yield new WaitForFixedUpdate (); //暂停协同程序,等到下一次调用FixedUpdat ...
- 【bzoj2245】[SDOI2011]工作安排 费用流
题目描述 你的公司接到了一批订单.订单要求你的公司提供n类产品,产品被编号为1~n,其中第i类产品共需要Ci件.公司共有m名员工,员工被编号为1~m员工能够制造的产品种类有所区别.一件产品必须完整地由 ...
- 论文笔记《Notes on convolutional neural networks》
这是个06年的老文章了,但是很多地方还是值得看一看的. 一.概要 主要讲了CNN的Feedforward Pass和 Backpropagation Pass,关键是卷积层和polling层的BP推导 ...
- javaScript 笔记(5) --- jQuery(上)
这节整理整理 iquery.js 相关的内容... 目录 --- jQuery 语法 --- 文档就绪事件 --- jQuery 选择器 --- jQuery 事件 --- jQuery 效果 jQu ...
- 最长k可重区间集(cogs 743)
«问题描述:«编程任务:对于给定的开区间集合I和正整数k,计算开区间集合I的最长k可重区间集的长度.«数据输入:由文件interv.in提供输入数据.文件的第1 行有2 个正整数n和k,分别表示开区间 ...