抽象工厂模式
抽象工厂模式与工厂方法模式最大的区别在于工厂方法模式针对的是一个产品等级结构,而抽象工厂模式则需要面对多个产品等级结构。简单的说,抽象工厂模式生产一系列的产品(这类产品称为产品族)。而在工厂方法模式里一个具体的工厂只生产一个具体的产品类。
java代码:
//Button.java
package com.designpattern.abstractfactory;
public interface Button {
public void type();
}
//WindowsButton.java
package com.designpattern.abstractfactory;
public class WindowsButton implements Button {
public void type() {
System.out.println("this is a Windows Button");
}
}
//LinuxButton.java
package com.designpattern.abstractfactory;
public class LinuxButton implements Button {
public void type() {
System.out.println("this is a Linux Button");
}
}
//Dialog.java
package com.designpattern.abstractfactory;
public interface Dialog {
public void type();
}
//WindowsDialog.java
package com.designpattern.abstractfactory;
public class WindowsDialog implements Dialog{
public void type() {
System.out.println("this is a Windows Dialog");
}
}
//LinuxDialog.java
package com.designpattern.abstractfactory;
public class LinuxDialog implements Dialog{
public void type() {
System.out.println("this is a Linux Dialog");
}
}
//OSFactory.java
package com.designpattern.abstractfactory;
public abstract class OSFactory {
public abstract Button createButton();
public abstract Dialog createDialog();
}
//WindowsFactory.java
package com.designpattern.abstractfactory;
public class WindowsFactory extends OSFactory {
public Button createButton() {
return new WindowsButton();
}
public Dialog createDialog() {
return new WindowsDialog();
}
}
//LinuxFactory.java
package com.designpattern.abstractfactory;
public class LinuxFactory extends OSFactory {
public Button createButton() {
return new LinuxButton();
}
public Dialog createDialog() {
return new LinuxDialog();
}
}
//test.java
package com.designpattern.abstractfactory;
public class test {
public static void main(String[] args) {
OSFactory factory = new LinuxFactory();
Button btn =factory.createButton();
Dialog dlg = factory.createDialog();
btn.type();
dlg.type();
}
}
该测试也可以利用XML支持,对上一章已经有所简介,这里简单运用,不进行XML文件。