public abstract class AbstractProductA {
public abstract void doA();
}
AbstractProductB
public abstract class AbstractProductB {
public abstract void doB();
}
然后再来打造具体的产品细节 ConcreteProductA1
public class ConcreteProductA1 extends AbstractProductA {
@Override
public void doA() {
System.out.println("Concrete Product A 1");
}
}
ConcreteProductA2
public class ConcreteProductA2 extends AbstractProductA {
@Override
public void doA() {
System.out.println("Concrete Product A 2");
}
}
ConcreteProductB1
public class ConcreteProductB1 extends AbstractProductB {
@Override
public void doB() {
System.out.println("Concrete Product B 1");
}
}
ConcreteProductB2
public class ConcreteProductB2 extends AbstractProductB {
@Override
public void doB() {
System.out.println("Concrete Product B 2");
}
}
OK,关于具体的产品细节已经做好了,现在最关键的就是通过工厂,来将这些细节组装成一个具体的产品
首先,在打造一个抽象工厂
AbstractFactory
public abstract class AbstractFactory {
// 生产产品细节A
public abstract AbstractProductA createProductA();
// 生产产品细节B
public abstract AbstractProductB createProductB();
}
public class ConcreteFactory1 extends AbstractFactory {
@Override
public AbstractProductA createProductA() {
return new ConcreteProductA1();
}
@Override
public AbstractProductB createProductB() {
return new ConcreteProductB2();
}
}
ConcreteFactory2:生产产品细节A2和产品细节B1
public class ConcreteFactory2 extends AbstractFactory {
@Override
public AbstractProductA createProductA() {
return new ConcreteProductA2();
}
@Override
public AbstractProductB createProductB() {
return new ConcreteProductB1();
}
}
public abstract class CakeStyle {
public abstract void style();
}
再根据奶油,打造一个抽象奶油产品
抽象奶油产品
public abstract class CakeCream {
public abstract void cream();
}
OK,下面分别开始制作爱心型模板,方形模板,草莓味奶油,芒果味奶油
爱心型模板
public class HeartStyle extends CakeStyle {
@Override
public void style() {
System.out.println("Heart Style");
}
}
方形模板
public class SquareStyle extends CakeStyle {
@Override
public void style() {
System.out.println("Square Style");
}
}
草莓味奶油
public class StrawberryCream extends CakeCream {
@Override
public void cream() {
System.out.println("Strawberry Cream");
}
}
芒果味奶油
public class MangoCream extends CakeCream {
@Override
public void cream() {
System.out.println("Mango Cream");
}
}
现在,无论是材料还是工具都做好了,只要根据需要,通过具体的工厂生产就行了
首先,还是来一个抽象工厂
public abstract class CakeFactory {
public abstract CakeCream cream();
public abstract CakeStyle style();
}
然后,就分别是爱心型草莓味蛋糕工厂和方形芒果味蛋糕工厂
爱心型草莓味蛋糕工厂
public class StrawberryHeartCake extends CakeFactory{
@Override
public CakeCream cream() {
return new StrawberryCream();
}
@Override
public CakeStyle style() {
return new HeartStyle();
}
}
方形芒果味蛋糕工厂
public class MangoSquareCake extends CakeFactory {
@Override
public CakeCream cream() {
return new MangoCream();
}
@Override
public CakeStyle style() {
return new SquareStyle();
}
}
大功告成,让我们来看看蛋糕做得怎么样
public static void main(String[] args) {
CakeFactory strawberryHeartCake = new StrawberryHeartCake();
strawberryHeartCake.cream().cream();
strawberryHeartCake.style().style();
System.out.println();
CakeFactory mangoSquareCake = new MangoSquareCake();
mangoSquareCake.cream().cream();
mangoSquareCake.style().style();
}
public class MangoHeartCake extends CakeFactory {
@Override
public CakeCream cream() {
return new MangoCream();
}
@Override
public CakeStyle style() {
return new HeartStyle();
}
}