简单工厂模式
public interface ITea {
// 沏茶 public void makeTea();
}
public class LongjingTea implements ITea {
@Override
public void makeTea() {
System.out.println("西湖龙井");
}
}
public class BiluochunTea implements ITea{
@Override
public void makeTea() {
System.out.println("碧螺春");
}
}
public class TeaFactory {
public ITea createTea(String type){
ITea tea = null;
if(type.equals("longjing")){
tea = new LongjingTea();
}else if(type.equals("biluochun")){
tea = new BiluochunTea();
}
if(tea != null){
tea.makeTea();
}
return tea;
}
}
工厂方法
public interface ITeaFactory { // 生产茶叶 public ITea createTea(); }
public class LongjingTeaFactory implements ITeaFactory{
@Override
public ITea createTea() {
return new LongjingTea();
}
}
public class BiluochunTeaFactory implements ITeaFactory{
@Override
public ITea createTea() {
return new BiluochunTea();
}
}
public class FactoryMethodTest {
public static void main(String[] args) {
ITeaFactory factory = new LongjingTeaFactory();
factory.createTea();
factory = new BiluochunTeaFactory();
factory.createTea();
}
}
如果要新增一种茶叶,比如毛尖,只需要新建一个生产毛尖的工厂类实现ITeaFactory即可。可以看到符合开闭原则、单一职责原则。
看下类图
抽象工厂
举例说明下,有两个工厂,美的、格力。这两个工厂都生产两种产品:冰箱和洗衣机。下面使用抽象工厂模式来描述每个工厂的两种产品的创建过程。
1、首先创建两个产品的接口类:
/**
* 冰箱
*/
public interface IFridge {
// 冷藏
void coldStorage();
}
/**
* 洗衣机
*/
public interface IWasher {
void wash();
}
public class MeideFridge implements IFridge{
@Override
public void coldStorage() {
System.out.println("美的冰箱");
}
}
public class MeideWasher implements IWasher {
@Override
public void wash() {
System.out.println("美的洗衣机");
}
}
public class GeliFridge implements IFridge {
@Override
public void coldStorage() {
System.out.println("格力冰箱");
}
}
public class GeliWasher implements IWasher{
@Override
public void wash() {
System.out.println("格力洗衣机");
}
}
/**
* 抽象工厂接口,家用电器工厂,生产冰箱和洗衣机
*/
public interface IHouseholdElectricFactory {
IFridge createFridge();
IWasher createWasher();
}
public class MeideHouseholdFactory implements IHouseholdElectricFactory{
@Override
public IFridge createFridge() {
return new MeideFridge();
}
@Override
public IWasher createWasher() {
return new MeideWasher();
}
}
public class GeliHouseholdFactory implements IHouseholdElectricFactory{
@Override
public IFridge createFridge() {
return new GeliFridge();
}
@Override
public IWasher createWasher() {
return new GeliWasher();
}
}