理解抽象工厂模式在于多类产品具有相同的类别就让某一工厂去生产这一类,比如夹克衫和裤子都有大号和中号的型号,那么一个工厂专门负责大号产品,一个工厂专门负责中号产品。
下面通过这个案例说明该模式。


- package AbstractFactory;
-
- public class Consumer {
- public static void main(String[] args) {
- Factory ft;
- Jacket jk;
- Trousers ts;
- ft = Factory.getFactory("Medium");
- jk = ft.getJacket();
- ts = ft.getTrousers();
- jk.getInfo();
- ts.getInfo();
- ft = Factory.getFactory("Super");
- jk = ft.getJacket();
- ts = ft.getTrousers();
- jk.getInfo();
- ts.getInfo();
- }
- }
- package AbstractFactory;
-
- public abstract class Factory {
- public static final String SUPER = "Super";
- public static final String MEDIUM = "Medium";
- public abstract Jacket getJacket();
- public abstract Trousers getTrousers();
- public static Factory getFactory(String s) {
- Factory ft = null;
- if(s.equals(SUPER)) ft = new SuperFactory();
- if(s.equals(MEDIUM)) ft = new MediumFactory();
- return ft;
- }
- }
- package AbstractFactory;
-
- public interface Jacket {
- void getInfo();
- }
- package AbstractFactory;
-
- public class MediumFactory extends Factory{
- public Jacket getJacket() {
- return new MediumJacket();
- }
- public Trousers getTrousers() {
- return new MediumTrousers();
- }
- }
- package AbstractFactory;
-
- public class MediumJacket implements Jacket{
- @Override
- public void getInfo() {
- System.out.println("生产了一件中号短上衣");
- }
- }
- package AbstractFactory;
-
- public class MediumTrousers implements Trousers{
- @Override
- public void getInfo() {
- System.out.println("生产了一件中号裤子");
- }
- }
- package AbstractFactory;
-
- public class SuperFactory extends Factory{
- public Jacket getJacket() {
- return new SuperJacket();
- }
- public Trousers getTrousers() {
- return new SuperTrousers();
- }
- }
- package AbstractFactory;
-
- public class SuperJacket implements Jacket{
- @Override
- public void getInfo() {
- System.out.println("生产了一件大号短上衣");
- }
- }
- package AbstractFactory;
-
- public class SuperTrousers implements Trousers{
- @Override
- public void getInfo() {
- System.out.println("生产了一件大号裤子");
- }
- }
- package AbstractFactory;
-
- public interface Trousers {
- void getInfo();
- }
