一、简单工厂模式
来源:互联网 发布:蜘蛛池源码下载 编辑:程序博客网 时间:2024/04/19 13:14
1、简单工厂模式:又叫做静态工厂模式,简单工厂模式是由一个工厂对象决定创建哪一种产品类的实例。简单工厂模式设计到工厂角色、抽象产品角色以及具体角色三个角色:
1)工厂类(Creator)角色:担任这个角色的是工厂方法模式的核心,含有与应用紧密相关的商业逻辑。工厂类在客户端的直接调用下创建产品对象,它往往由一个具体的java类实现。
2)抽象产品(Product)角色:担任这个角色的类是一个由工厂方法模式所创建的对象的父类,或它们共同拥有的接口。抽象产品角色可以用一个java接口或者java抽象类实现。
3)具体产品(Concrete Product)角色:工厂方法模式所创建的任何对象都是这个角色的实例,具体产品角色由一个具体java类实现
简单工厂模式实例代码(以水果为例):
1、抽象产品角色(可以使用接口,也可以使用抽象类)
package com.design.pattern.simplefactory;
public interface Fruit {
/**
* 生长
*/
void grow();
/**
*收获
*/
void harvest();
/**
*种植
*/
void plant();
}
2、具体产品
package com.design.pattern.simplefactory;
public class Grape implements Fruit {
private boolean seedless;
public void grow() {
log("Grape is growing.....");
}
public void harvest() {
log("Grape has been harvested.");
}
public void plant() {
log("Grape has been planted.");
}
public static void log(String msg){
System.out.println(msg);
}
public boolean getSeedless(){
return seedless;
}
public void setSeedless(boolean seedless){
this.seedless=seedless;
}
}
package com.design.pattern.simplefactory;
public class Strawberry implements Fruit {
public void grow() {
log("Strawberry is growing.....");
}
public void harvest() {
log("Strawberry has been harvested.");
}
public void plant() {
log("Strawberry has been planted.");
}
public static void log(String msg){
System.out.println(msg);
}
}
package com.design.pattern.simplefactory;
public class Apple implements Fruit {
private int treeAge;
/**
* 生长
*/
public void grow() {
log("Apple is growing....");
}
/**
* 收获
*/
public void harvest() {
log("Apple has been harvested.");
}
/**
* 种植
*/
public void plant() {
log("Apple has been planted.");
}
/**
* 辅助方法
* @param msg
*/
public static void log(String msg){
System.out.println(msg);
}
/**
* 树龄
* @return
*/
public int getTreeAge(){
return treeAge;
}
public void setTreeAge(int treeAge) {
this.treeAge = treeAge;
}
}
3、工厂类
package com.design.pattern.simplefactory;
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.");
}
}
}
4、测试
package com.design.pattern.simplefactory;
public class TestSimpleFactory {
public static void main(String[] args) {
try{
FruitGardener.factory("grape");
FruitGardener.factory("apple");
FruitGardener.factory("strawberry");
}catch(BadFruitException e){
}
}
}
- 一、简单工厂模式
- 一 简单工厂模式
- 一、简单工厂模式
- (一)简单工厂模式
- (一)简单工厂模式
- 一 简单工厂模式
- 一、简单工厂模式
- 一、简单工厂模式
- 一、简单工厂模式
- 简单工厂模式(一)
- 工厂模式(一)--简单工厂模式
- 工厂设计模式一 简单工厂模式
- 模式一(简单工厂)
- 简单工厂模式(一)
- (一)简单工厂模式
- 设计模式一 简单工厂
- 简单工厂模式(一)
- (一)简单工厂模式
- 《非诚勿扰》是涅槃09楼市的告诫
- SQL注入攻击的原理及其防范措施
- ajax从入门到精通
- 经济学家骇人语录网上流传:《中国经济学家骇人语录大全》
- iText使用入门,生成HelloWorld.PDF详解
- 一、简单工厂模式
- 关于Oracle与SqlServer中获取所有字段、主键、外键的sql语句
- 解读联想重组:终于裁员了
- oralce数据库的回滚操作原理
- 源代码文档自动生成工具 Doxygen
- j2me判断机器平台代码---参考了部分网上资料
- 关于UltraEdit的python语法高亮
- Linux下静默安装,升级和删除Oracle客户端
- Delphi 函数返回值与寄存器