(缺点:每增加一个具体产品时 ,就要修改工厂方法,工厂方法负责了所有具体产品的创建)
举个例子:
------------------
public interface Fruit {
void grow();
void harvest();
void plant();
}
-------------------
public class Apple implements Fruit {
private int treeAge;
public void grow() {
// TODO Auto-generated method stub
System.out.println("Apple is growing...");
}
public void harvest() {
// TODO Auto-generated method stub
System.out.println("Apple has been harvested.");
}
public void plant() {
// TODO Auto-generated method stub
System.out.println("Apple has been planted.");
}
public int getTreeAge() {
return treeAge;
}
public void setTreeAge(int treeAge) {
this.treeAge = treeAge;
}
}
-------------------
public class Grape implements Fruit {
private boolean seedless;
public boolean isSeedless() {
return seedless;
}
public void setSeedless(boolean seedless) {
this.seedless = seedless;
}
public void grow() {
// TODO Auto-generated method stub
System.out.println("Grape is growing...");
}
public void harvest() {
// TODO Auto-generated method stub
System.out.println("Grape has been harvested.");
}
public void plant() {
// TODO Auto-generated method stub
System.out.println("Grape has been planted.");
}
}
---------------------------
public class Strawberry implements Fruit {
public void grow() {
// TODO Auto-generated method stub
System.out.println("Strawberry is growing...");
}
public void harvest() {
// TODO Auto-generated method stub
System.out.println("Strawberry has been harvested.");
}
public void plant() {
// TODO Auto-generated method stub
System.out.println("Strawberry has been planted.");
}
}
-------------------------
public class FruitGardener {
//静态工厂方法
public static Fruit factory(String which) throws BadFruitException{
if(which.equalsIgnoreCase("apple")){
return new Apple();
}
else if(which.equalsIgnoreCase("strawberry")){
return new Strawberry();
}
else if(which.equalsIgnoreCase("grape")){
return new Grape();
}
else{
throw new BadFruitException("Bad fruit request");
}
}
}
---------------------------
public class BadFruitException extends Exception {
public BadFruitException(String msg){
super(msg);
}
}
--------------------------
public class Client {
public static void main(String[] args){
try{
Fruit apple = (Fruit)FruitGardener.factory("Apple");
System.out.println("apple is class: " + apple.getClass().getName());
apple.plant();
apple.grow();
apple.harvest();
System.out.println();
Fruit grape = (Fruit)FruitGardener.factory("grape");
System.out.println("grape is class: " + grape.getClass().getName());
grape.plant();
grape.grow();
grape.harvest();
System.out.println();
Fruit strawberry = (Fruit)FruitGardener.factory("strawberry");
System.out.println("strawberry is class: " + strawberry.getClass().getName());
strawberry.plant();
strawberry.grow();
strawberry.harvest();
}catch(BadFruitException e){
e.printStackTrace();
}
}
}
2 工厂方法模式:解决了简单工厂模式的缺点, 将每一个具体产品的创建工作交给对应的具体工厂角色去解决
举个例子:
---------------------
public interface FruitGardener {
public Fruit factory();
}
---------------------
public class AppleGardener implements FruitGardener{
public Fruit factory() {
return new Apple();
}
}
-----------------
public class GrapeGardener implements FruitGardener{
public Fruit factory() {
return new Grape();
}
}
----------------------
public class StrawGardener implements FruitGardener{
public Fruit factory() {
return new Strawberry();
}
}
-----------------
public class Client {
private static FruitGardener applegardener, grapegardener, strawgardener;
private static Fruit apple, grape, strawberry;
public static void main(String[] args){
applegardener = new AppleGardener();
apple = applegardener.factory();
System.out.println("apple is class: " + apple.getClass().getName());
apple.plant();
apple.grow();
apple.harvest();
System.out.println();
grapegardener = new GrapeGardener();
grape = grapegardener.factory();
System.out.println("grape is class: " + grape.getClass().getName());
grape.plant();
grape.grow();
grape.harvest();
System.out.println();
strawgardener = new StrawGardener();
strawberry = strawgardener.factory();
System.out.println("strawberry is class: " + strawberry.getClass().getName());
strawberry.plant();
strawberry.grow();
strawberry.harvest();
}
}
3 抽象工厂模式:解决多产品簇问题
举个例子:
-------------------
public interface Fruit {
// public String getName();
}
public class NorthernFruit implements Fruit{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public NorthernFruit(String name) {
super();
// TODO Auto-generated constructor stub
this.name = name;
}
}
public class TropicalFruit implements Fruit{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public TropicalFruit(String name) {
super();
// TODO Auto-generated constructor stub
this.name = name;
}
}
public interface Veggie {
}
public class TropicalVeggie implements Veggie{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public TropicalVeggie(String name) {
super();
// TODO Auto-generated constructor stub
this.name = name;
}
}
public class NorthernVeggie implements Veggie{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public NorthernVeggie(String name) {
super();
// TODO Auto-generated constructor stub
this.name = name;
}
}
-------------------------
public interface Gardener {
public Fruit createFruit(String name);
public Veggie createVeggie(String name);
}
public class NorthernGardener implements Gardener {
public Fruit createFruit(String name) {
return new NorthernFruit(name);
}
public Veggie createVeggie(String name) {
return new NorthernVeggie(name);
}
}
public class TropicalGardener implements Gardener {
public Fruit createFruit(String name) {
return new TropicalFruit(name);
}
public Veggie createVeggie(String name) {
return new TropicalVeggie(name);
}
}
public class Client {
private static Gardener tropicalgardener ,northerngardener;
private static Fruit northernfruit, tropicalfruit;
private static Veggie northernveggie, tropicalveggie;
public static void main(String[] args){
tropicalgardener = new TropicalGardener();
tropicalfruit = tropicalgardener.createFruit("tropicalfruit");
//System.out.println(tropicalfruit.getName());
tropicalveggie = tropicalgardener.createVeggie("tropicalveggie");
northerngardener = new NorthernGardener();
northernfruit = northerngardener.createFruit("northernfruit");
northernveggie = northerngardener.createVeggie("northernveggie");
}
}
分享到:
相关推荐
Java简单工厂模式和传统模式实现对比,通过简单实例比对两种方式差异,体现传统模式的弊端及工厂模式优势。利于初学者后续接触spring
Java 简单工厂模式例子,Eclipse直接引入就可以使用
从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂...
JAVA简单工厂模式四则运算计算器
java简单工厂模式源码实例,可用于java简单工厂模式学习!
JAVA简单工厂创立性模式介绍,包含简单工厂,工厂方法,抽象工厂。举例说明让您更好理解!
介绍的是工厂模式 包括简单工厂模式、工厂方法模式、抽象工厂模式 包括PPT和代码
有关java简单的工厂模式士大夫的广泛的发的的辅导费东方德发德辅道
一个简单的工厂模式(java)
XML解析器-简单工厂模式.doc XML解析器-简单工厂模式.doc
java 设计模式 mvc模式 单例模式 代理 工厂 简单工厂
主要介绍了Java简单工厂模式定义与用法,结合实例形式分析了java简单工厂模式的相关定义与使用技巧,并给出了原理类图进行总结,需要的朋友可以参考下
JAVA设计模式(01):创建型-工厂模式【简单工厂模式】(Simple Factory)
java设计模式 简单工厂模式uml类图,一张图就让你秒懂简单工厂模式
简单工厂模式通过一个工厂类来创建产品对象;
本文主要介绍了JAVA简单工厂模式(从现实生活角度理解代码原理)的相关知识。具有很好的参考价值。下面跟着小编一起来看下吧
定义: 结构说明: 相关概念: 接口: 接口与抽象类的区别: 面向接口编程: 功能: 时序图: 优缺点: 代码阐释:
这是代码,介绍请查看以下博客地址: http://www.cnblogs.com/homg/p/3548110.html代码乱码请使用utf-8编码。
简单工厂模式 SimpleFactory,适用于业务相对较简单地情况,少扯闲话,先上code: ~~ ICar.java ~~ 抽象产品角色接口 /** * @author VerpHen * @date 2013年9月10日 上午9:36:19 */ package org....