zoukankan      html  css  js  c++  java
  • 抽象工厂模式--java代码实现

    抽象工厂模式

      抽象工厂模式,对方法工厂模式进行抽象。世界各地都有自己的水果园,我们将这些水果园抽象为一个水果园接口,在中国、英国和美国都有水果园,种植不同的水果,比如苹果、香蕉和梨等。这里将苹果进行抽象,所以,苹果又分为中国苹果,英国苹果和美国苹果。中国的水果园中有苹果、香蕉和梨等。抽象工厂中声明生产苹果、香蕉和梨等水果,那么具体的工厂相当于中国、英国和美国的水果园,各个水果园负责生产水果、香蕉和梨等。

    1.相关术语

    • 产品等级结构:产品的继承结构,与类的继承相似。例如苹果是一个抽象的类,那么中国苹果、美国苹果和英国的苹果就是其子类。

    • 产品族:指同一个工厂生产的,位于不同的产品等级结构的一组产品。例如苹果、香蕉和梨都产自中国,水果的等级结构不同,构成一个产品族。

    • 抽象工厂:是一个接口,抽象工厂模式的核心,包含对多个产品等级结构的声明,任何工厂类都必须实现这个接口。

    • 具体工厂:是抽象工厂的实现,负责实例化某个产品族中的产品对象。例如中国工厂生产苹果、香蕉和梨这些产品。

    2.产品族和产品等级结构示意图

     

    3.抽象工厂模式示意图

    4.创建Fruit接口、Apple抽象类、ChinaApple类等

    Fruit(interface):

    public interface Fruit {
        public void get();
    }

    Apple抽象类:

    public abstract class Apple implements Fruit{
        public abstract void get();
    }

    ChinaApple类:

    public class ChinaApple extends Apple {
    
        @Override
        public void get() {
            System.out.println("中国的苹果...");
        }
    }

    5.创建抽象工厂、具体工厂

    抽象工厂:

    public interface FruitFactory {
        //实例化苹果
        public Fruit getApple();
        //实例化香蕉
        public Fruit getBanana();
    }

    具体工厂:

    public class ChinaFactory implements FruitFactory {
    
        @Override
        public Fruit getApple() {
            return new ChinaApple();
        }
        
        @Override
        public Fruit getBanana() {
            return new ChinaBanana();
        }
    }

    6.生产水果

    MainClass:

    public class MainClass {
    
        public static void main(String[] args){
            //创建中国工厂
            FruitFactory chinaFactory = new ChinaFactory();
            //通过中国工厂生产中国苹果实例
            Fruit apple = chinaFactory.getApple();
            apple.get();
            //通过中国工厂生产中国香蕉实例
            Fruit banana = chinaFactory.getBanana();
            banana.get();        
            
            //创建英国工厂
            FruitFactory englandFactory = new EnglandFactory();
            //通过英国工厂生产英国苹果实例
            Fruit apple1 = englandFactory.getApple();
            apple1.get();
            //通过英国工厂生产英国香蕉实例
            Fruit banana2 = englandFactory.getBanana();
            banana2.get();
        }
    }

    7.结果

    8.总结

      模式来源于生活。抽象工厂模式,对工厂方法模式进行了升级。对产品进行了进一步的抽象,同时改变了抽象工厂和具体工厂的设计模式。这种模式便于横向的扩展,例如我们想添加一个美国工厂来生产苹果和香蕉,只需要新建美国苹果,美国香蕉和生产这两种水果的具体工厂--美国工厂。缺点就是不利于纵向的扩展,例如我们想在工厂中生产梨,这就需要修改抽象工厂,各个具体工厂也同时需要修改。

      参考B站视频https://www.bilibili.com/video/av34162848

  • 相关阅读:
    【BZOJ】【1662】/【POJ】【3252】 【USACO 2006 Nov】Round Number
    【BZOJ】【1026】【SCOI2009】Windy数
    【HDOJ】【3555】Bomb
    【HDOJ】【2089】不要62
    【Ural】【1057】Amount of degrees
    【POJ】【3710】Christmas Game
    【BZOJ】【2940】【POI2000】条纹
    【POJ】【3537】Crosses and Crosses
    【POJ】【2068】Nim
    【POJ】【2960】S-Nim
  • 原文地址:https://www.cnblogs.com/peter_zhang/p/AbstractFactory.html
Copyright © 2011-2022 走看看