美文网首页
抽象工厂模式

抽象工厂模式

作者: junjun2018 | 来源:发表于2018-07-24 11:03 被阅读0次

    在工厂方法模式的基础上,新增加了产品族的概念。将原来的一对一关系,变成了一对多,这个一对多和简单工厂模式的不同,简单工厂模式的一对多,指的是一个工厂类对应多个创建的对象,这里的一对多,是一个抽象工厂,对应的多个产品族的子工厂,每个子工厂中对应着多个系列的具体产品实现。用户在使用的时候,就可以随意组合各种产品,程序也变的更灵活。

    抽象工厂模式类图

    上篇已经说到:去KFC吃薯条。
    本篇演示:去吃KFC的薯条,喝Dicos的雪碧

    //首先,产品接口 吃喝都有
    public interface IChips {
        void eat();
    }
    public interface IDrink {
        void drink();
    }
    
    //具体产品
    //吃的
    public class DIcosChip implements IChips {
    
        @Override
        public void eat() {
            System.out.println("吃到了麦当劳的薯条");
        }
    }
    public class KFCChip implements IChips {
        @Override
        public void eat() {
            System.out.println("吃到了KFC的薯条");
        }
    }
    //喝的
    public class KFCCola implements IDrink {
    
        @Override
        public void drink() {
            System.out.println("喝到了肯德基的可乐");
        }
    }
    public class DicosSprite implements IDrink {
        @Override
        public void drink() {
            System.out.println("喝到了麦当劳的雪碧");
        }
    }
    
    //抽象工厂
    public interface IStore {
        //不仅可以吃到薯条,还能喝到汽水哦,后续还有瓜子,花生米哦
        IChips getChips();
    
        IDrink getDrink();
    }
    //具体工厂
    public class KFC implements IStore {
        @Override
        public IChips getChips() {
            System.out.println("肯德基生产的薯条");
            //具体生产对象在这里
            return new KFCChip();
        }
    
        @Override
        public IDrink getDrink() {
            System.out.println("肯德基生产的可乐");
            return new KFCCola();
        }
    }
    public class Dicos implements IStore {
        @Override
        public IChips getChips() {
            System.out.println("德克士生产了薯条!");
            //在这里生产薯条,你也可以产出其他家的薯条,用户是不知道滴。有种狸猫换太子的感觉
            return new DIcosChip();
        }
    
        @Override
        public IDrink getDrink() {
            System.out.println("麦当劳生产的雪碧");
            return new DicosSprite();
        }
    }
    //测试类
    public class AbstractFactoryTest {
        public static void main(String[] args) {
            IStore kfc = new KFC();
            IChips chips = kfc.getChips();
            chips.eat();
    
            new Dicos().getDrink().drink();
        }
    }
    //结果:
    肯德基生产的薯条
    吃到了KFC的薯条
    麦当劳生产的雪碧
    喝到了麦当劳的雪碧
    

    简单工厂模式,工厂方法模式,抽象工厂模式都叫工厂模式,实际运用中,没有必要严格区分哪种模式,而应该考虑是否达到了解耦的目的。

    相关文章

      网友评论

          本文标题:抽象工厂模式

          本文链接:https://www.haomeiwen.com/subject/yzlemftx.html