`

java设计模式1:simplefactory

阅读更多

PH`Y3AU]7FRXZ6GY{%BP$0S

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);
}
}

W0$[P}~W0@FH)[X]@KP2G0F

总结:简单工厂模式涉及到工厂角色,抽象产品角色以及具体产品角色等三个角色。

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; */
}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics