抽象工厂模式:
定义:
为创建一组相关或相互依赖的对象提供一个接口,而且无须指定他们的具体类。
抽象工厂模式是工厂方法模式的升级版本,在有多个业务品种、业务分类时,通过抽象工厂模式产生需要的对象是一种非常好的解决方法。
通过女娲造人的例子来简单了解一下这个模式。
上篇文章中的女娲只是造出了不同肤色的人种,没有定义性别,这篇文章我们就来实现定义性别这个需求。
一个接口,多个抽象类,然后是实现类,每个人种都是一个抽象类,性别是在实现类中实现的。
类图:
人种接口:
interface Human {
public void getColor();
public void talk();
public void getSex();
}
各种肤色的人种:
abstract class YellowHuman implements Human {
public void getColor() {
System.out.println("黄种人的颜色是黄色的");
}
public void talk() {
System.out.println("黄色人种会说话,一般说的都是双字节");
}
}
abstract class BlackHuman implements Human {
public void getColor() {
System.out.println("黑种人的颜色是黑的");
}
public void talk() {
System.out.println("黑人会说话,但是听不懂");
}
}
abstract class WhiteHuman implements Human {
public void getColor() {
System.out.println("白种人的颜色是白色的");
}
public void talk() {
System.out.println("白种人会说话,但一般是单字节");
}
}
每个肤色的人种有两个实现类,分别产生男性和女性。
class FemalYellowHuman extends YellowHuman {
public void getSex() {
System.out.println("黄人女性");
}
}
class MaleYellowHuman extends YellowHuman {
public void getSex() {
System.out.println("黄人男性");
}
}
class FemalBlackHuman extends BlackHuman {
public void getSex() {
System.out.println("黑色女人");
}
}
class MaleBlackHuman extends BlackHuman {
public void getSex() {
System.out.println("黑色男人");
}
}
class FemalWhiteHuman extends WhiteHuman {
public void getSex() {
System.out.println("白人女性");
}
}
class MaleWhiteHuman extends WhiteHuman {
public void getSex() {
System.out.println("白人男性");
}
}
工厂接口:
interface HumanFactory {
public Human createWhiteHuman();
public Human createBlackHuman();
public Human createYellowHuman();
}
两个工厂实现类,分别产生男性和女性。
class FemalHumanFactory implements HumanFactory {
public Human createWhiteHuman() {
return new FemalWhiteHuman();
}
public Human createBlackHuman() {
return new FemalBlackHuman();
}
public Human createYellowHuman() {
return new FemalYellowHuman();
}
}
class MaleHumanFactory implements HumanFactory {
public Human createWhiteHuman() {
return new MaleWhiteHuman();
}
public Human createBlackHuman() {
return new MaleBlackHuman();
}
public Human createYellowHuman() {
return new MaleYellowHuman();
}
}
场景类:
public class Client {
public static void main(String[] args) {
HumanFactory femalHumanFactory = new FemalHumanFactory();
HumanFactory maleHumanFactory = new MaleHumanFactory();
Human maleYellowHuman = maleHumanFactory.createYellowHuman();
Human femalYellowHuman = femalHumanFactory.createYellowHuman();
System.out.println("-----------------生产一个黄色男人--------------");
maleYellowHuman.getSex();
maleYellowHuman.talk();
maleYellowHuman.getColor();
System.out.println("-----------------生产一个黄色女人---------------");
femalYellowHuman.getSex();
femalYellowHuman.talk();
femalYellowHuman.getColor();
}
}
让抽象类去实现接口,在抽象类中实现的方法,其子类中不必再实现,而抽象类中没有实现(接口中)的方法,在子类继承的时候好要去实现。
这个设计模式看了几遍了,感觉理解不是很深刻。
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/u013476556/article/details/47127801