设计模式之静态工厂模式

时间:2023-02-12 20:34:21

上一次说到简单工厂模式,感觉简单工厂模式是比较简单的,但是你有没有发现的是,如果这个工厂要生产比较多的牙膏和牙刷那就要老是去创建工厂实例,比较好的方法去解决的是把方法变成静态的,也就是静态工厂模式。

把上次的代码修改一下粘出来。如下:

package test.pattern;
/**
* 这是一个物品抽象类
* @author CJB
*
*/

public abstract class Good {

/**
* 定义物品的用途的抽象方法
*/

public abstract void use();
/**
* 定义物品价格的抽象方法
*/

public abstract void price();
}

package test.pattern;

/**
* 牙刷类
* @author CJB
*
*/

public class ToothBrush extends Good {

@Override
public void use() {
// TODO Auto-generated method stub
System.out.println("用途:刷牙");
}

@Override
public void price() {
// TODO Auto-generated method stub
System.out.println("价格:5块钱");
}

}

package test.pattern;
/**
* 牙膏类
* @author CJB
*
*/

public class ToothPaste extends Good {

@Override
public void use() {
// TODO Auto-generated method stub
System.out.println("用途:健康口腔,洁白牙齿和清新口气");
}

@Override
public void price() {
// TODO Auto-generated method stub
System.out.println("价格:5块钱");
}

}

package test.pattern;
/**
* 工厂类
* @author CJB
*
*/

public class GoodFactory {
public static Good getGood(String name){
Good good=null;
switch (name) {
case "牙膏":
good= new ToothPaste();
break;
case "牙刷":
good=new ToothBrush();
break;
}
return good;
}
}

package test.pattern;

import org.junit.Test;
/**
* 测试类
* @author CJB
*
*/

public class TestFactory {
@Test
public void test(){
Good good=GoodFactory.getGood("牙膏");
Good good2=GoodFactory.getGood("牙刷");
good.use();
good.price();
good2.use();
good2.price();
}
}

测试结果和上一次的一样。

静态工厂是在简单工厂模式上进行了一次修改,也就是在获取对象的方法加上static,那就成了静态工厂模式了。
Thank .