java简单工厂模式

(缺点:每增加一个具体产品时 ,就要修改工厂方法,工厂方法负责了所有具体产品的创建)

举个例子:
------------------
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");
}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值