simplefactory比较简单,即是根据不同的条件,创建不同的产品,这些产品有一个共同的基类,封装了相同的行为,上例中这些水果都有三种功能,并在基类中进行了封装。
相关代码:
package com.javapatterns.simplefactory;
/**
* 水果类,接口
* @author luhx
*/
public interface Fruit
{
/**
* 栽种
*/
void plant();
/**
* 成长
*/
void grow();
/**
* 收割
*/
void harvest();
}
package com.javapatterns.simplefactory;
/**
* 苹果类,继承于Fruit
* @author luhx
*
*/
public class Apple implements Fruit
{
public void plant()
{
System.out.println("Apple has been planted.");
}
public void grow()
{
System.out.println("Apple is growing...");
}
public void harvest()
{
System.out.println("Apple has been harvested.");
}
/**
* 取树龄
* @return :int
* @uml.property name="treeAge"
*/
public int getTreeAge(){ return treeAge; }
/**
* 设树龄
* @param treeAge:int
* @uml.property name="treeAge"
*/
public void setTreeAge(int treeAge){ this.treeAge = treeAge; }
/**
* 树年龄
* @uml.property name="treeAge"
*/
private int treeAge;
}
package com.javapatterns.simplefactory;
/**
* 葡萄类,继承于Fruit
* @author luhx
*
*/
public class Grape implements Fruit
{
public void grow()
{
System.out.println("Grape is growing...");
}
public void harvest()
{
System.out.println("Grape has been harvested.");
}
public void plant()
{
System.out.println("Grape has been planted.");
}
/**
* 判断是否有籽
* @return:boolean
*/
public boolean getSeedless()
{
return seedless;
}
/**
* 设置是否有籽标识
* @param seedless:boolean
* @uml.property name="seedless"
*/
public void setSeedless(boolean seedless)
{
this.seedless = seedless;
}
/**
* 是否有籽
* @uml.property name="seedless"
*/
private boolean seedless;
}
package com.javapatterns.simplefactory;
/**
* 水果园艺工人类,creater
* @author luhx
*
*/
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");
}
}
}
package com.javapatterns.simplefactory;
/**
* 水果园艺工人类,creater
* @author luhx
*
*/
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");
}
}
}
package com.javapatterns.simplefactory;
/**
* 水果异常类
* @author luhx
*
*/
public class BadFruitException extends Exception
{
public BadFruitException(String msg)
{
super(msg);
}
}
总结:简单工厂模式涉及到工厂角色,抽象产品角色以及具体产品角色等三个角色。
1、工厂类(Creator):担任这个角色的是工厂方法模式的核心,含有与应用紧密相关的商业逻辑。工厂类在客户端的直接调用下创建产品对象,它往往由一个具体的Java类实现。
2、抽象产品(Product):担任这个角色的类是由工厂实方法模式所创建的对象的父类,或它们共同拥有的接口。抽象产品角色可以用一个Java接口或者Java抽角类实现。
3、具体产品(Concrete Product):工厂方法模式所创建的任何对象都是这个角色的实例,具体产品角色由一个具体Java类实现。
package com.javapatterns.simplefactory;
public interface Product
{
}
package com.javapatterns.simplefactory;
public class ConcreteProduct implements Product
{
public ConcreteProduct(){}
}
package com.javapatterns.simplefactory;
public class Creator
{
public static Product factory()
{
return new ConcreteProduct();
}
/** @link dependency
* @label Creates*/
/*# ConcreteProduct lnkConcreteProduct; */
}
分享到:
相关推荐
java 设计模式 Facade外观模式 Simple Factory 简单工厂模式,代码有点罗嗦,不过可移植性很强
JAVA设计模式(01):创建型-工厂模式【简单工厂模式】(Simple Factory)
设计模式 t01SimpleFactory
1. 简单工厂模式(Simple Factory) 2. 工厂方法模式(Factory Method) 3. 抽象工厂模式(Abstract Factory) 这三种模式从上到下逐步抽象,并且更具一般性。还有一种分类法,就是将简单工厂模式看为工厂方法模式的一...
Java设计模式之一简单工厂模式(SimpleFactory)源码
java 设计模式 bridge CommandPattern factoryMethod simpleFactory
获取到【文件夹】名称: simple_factory_pattern 获取到【文件夹】名称: single_pattern 获取到【文件夹】名称: status_pattern 获取到【文件夹】名称: strategy_pattern 获取到【文件夹】名称: templet_...
这主要很快地让你了解工厂设计模式,java里面Factory模式的设计过程
GOF在《设计模式》一书中将工厂模式分为两类:工厂方法模式(Factory Method)与抽象工厂模式(Abstract Factory)。将简单工厂模式(Simple Factory)看为工厂方法模式的一种特例,两者归为一类。 两者皆可,在...
23种java版设计模式源码案例.zip 0.目录 创建型模式(creational) 简单工厂(simplefactory) 动态工厂(dynamic) 抽象工厂(abstract) 单例模式(singleton) 建造者模式(builder) 原型模式(prototype) 结构型模式...
实用的 java 设计原则 和 设计模式,阅读完本书,可以了解java的api背后的设计思想和理念。1000多页巨著,只有超值,没有之一。 第1章 模式的简史和形而上学 第2章 统一建模语言UML简介 第12章 简单工厂\(Simple ...
第03章 术业有专攻:简单工厂模式 (SimpleFactory) 第04章 精益求精:工厂方法模式 (FactoryMethod) 第05章 再接再厉:抽象工厂模式 (AbstractFactory) 第06章 孜孜不倦:创建者模式 (Builder) 第07章 照猫画虎:...
抽象工厂还有另外一个关键要点,是因为 SimpleFactory内,生产Sample和生产Sample2的方法之间有一定联系,所以才要将这两个方法捆绑在一个类中,这个工厂类有其本身特征,也许制造过程是统一的,比如:制造工艺比较...
com.javapatterns.javaio 专题:设计模式在Java I/O中的应用 com.javapatterns.keygen 专题:序列键生成器与单例及多例模式 com.javapatterns.liskov 里氏代换原则 com.javapatterns.lod 迪米特法则 ...
设计模式-简单工厂 demo
工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体... 工厂模式在《Java 与模式》中分为三类: 1)简单工厂模式(Simple Factory) 2)工厂方法模式(Factory Method) 3)抽象工厂模式(Abstract Factory
参考书籍(推荐): 《Java设计模式 - 刘伟》 , 《图解设计模式 - [日]结城浩》 创建型模式 :check_mark:简单工厂模式( Simple Factor Pattern ) :memo: , :check_mark:工厂方法模式( Factory Method Pattern )...
设计模式 0.目录 创建型模式(creational) 简单工厂(simplefactory) 动态工厂(dynamic) 抽象工厂(abstract) 单例模式(singleton) 建造者模式(builder) 原型模式(prototype) 结构型模式(structure) 适配器模式(adaptor...
java设计模式 简单工厂模式详解 simple factory static pattern
1.简单工厂模式SimpleFactory 简单来说就是根据参数的不同返回不同类的实例, 被创建的实例通常都具有共同的父类. JDK中Calendar类的createCalendar方法创建实例时就使用了简单工厂模式. 1. 图表库ChartLibrary 某...