Java设计模式之抽象工厂

版权声明:本文为博主原创文章,未经博主允许不得转载 https://blog.csdn.net/qq_33829547/article/details/81052069

前言

如果前面已经学习了工厂模式抽象工厂学习起来也很简单,只是对工厂模式做了关于产品族产品等级结构概念的扩展。

先解释什么是产品族和产品等级结构
比如你拥有一个衣柜,衣柜里有衬衣,有夹克,有外套,有牛仔库,有休闲裤,有西服,有西裤……

这里的衣服有休闲的,有正式的,有时尚等等多种风格,每一种风格分别又有自己的部件,比如上衣、裤子。

同一种风格、能够同时搭配的衣物组合就是一个产品族,同一个产品族下面的衣帽裤鞋就是不同的产品等级结构。比如西装、西裤、皮鞋,这就属于同一产品族,而T恤和牛仔裤就是另一个产品族;而牛仔库和西裤又属于同一产品等级结构

抽象工厂使用厂场景:系统的产品有多于一个的产品族,而系统只消费其中某一族的产品。

抽象工厂

先了解了上面的概念,接下来就通过代码的形式构造上述场景所展示的设计模式。

先写出各种产品的接口

Clothe.java

// 上衣产品接口
public interface Clothe {
    void show();// 打印信息
}

Pant.java

// 裤子产品接口
public interface Pant {
    void show();// 打印信息
}

Shoe.java

// 鞋子产品接口
public interface Shoe {
    void show();// 打印信息
}

接下来分别写出西装休闲装这两个产品族的具体产品实现类

西装产品族:
WesternClothe.java

// 西装上衣产品
public class WesternClothe implements Clothe {
    @Override
    public void show() {
        System.out.println("西服");
    }
}

WesternPant.java

// 西裤产品
public class WesternPant implements Pant {
    @Override
    public void show() {
        System.out.println("西裤");
    }
}

LeatherShoes.java

// 皮鞋产品
public class LeatherShoes implements Shoe {
    @Override
    public void show() {
        System.out.println("皮鞋");
    }
}

休闲装产品族:

TShirt.java

// T恤产品
public class TShirt implements Clothe {
    @Override
    public void show() {
        System.out.println("T恤");
    }
}

Jeans.java

// 牛仔裤产品
public class Jeans implements Pant {
    @Override
    public void show() {
        System.out.println("牛仔裤");
    }
}

CanvasShoe.java

// 帆布鞋产品
public class CanvasShoe implements Shoe {
    @Override
    public void show() {
        System.out.println("帆布鞋");
    }
}

然后写出工厂接口,可以注意到抽象工厂模式工厂模式的工厂接口的区别在于,工厂模式接口只生产某一类产品,而抽象工厂模式生产的是一套产品族

Factory.java

// 工厂接口
public interface Factory {
    Clothe produceCloth();// 生产上衣

    Pant producePant();// 生产裤子

    Shoe produceShoe();// 生产鞋子
}

WesternFacroty.java

// 西装产品工厂类
public class WesternFacroty implements Factory {
    @Override
    public Clothe produceCloth() {
        return new WesternClothe();
    }

    @Override
    public Pant producePant() {
        return new WesternPant();
    }

    @Override
    public Shoe produceShoe() {
        return new LeatherShoes();
    }
}

LeisureFactory.java

// 休闲装产品工厂类
public class LeisureFactory implements Factory {
    @Override
    public Clothe produceCloth() {
        return new TShirt();
    }

    @Override
    public Pant producePant() {
        return new Jeans();
    }

    @Override
    public Shoe produceShoe() {
        return new CanvasShoe();
    }
}

Main.java

// 抽象工厂调用过程
public class Main {
    public static void main(String[] args) {
        Factory factory = new WesternFacroty(); // 西装产品工厂
        Clothe clothe = factory.produceCloth(); // 生产上衣
        Pant pant = factory.producePant(); // 生产裤子
        Shoe shoe = factory.produceShoe(); // 生产鞋子
        clothe.show();  // 打印西服
        pant.show();    // 打印西裤
        shoe.show();    // 打印皮鞋
        System.out.println("===切换产品族====");
        factory = new LeisureFactory(); // 切换到休闲装产品工厂
        clothe = factory.produceCloth();// 生产上衣
        pant = factory.producePant();   // 生产裤子
        shoe = factory.produceShoe();   // 生产鞋子
        clothe.show();  // 打印T恤
        pant.show();    // 打印牛仔裤
        shoe.show();    // 打印帆布鞋
    }
}
阅读更多

没有更多推荐了,返回首页