• 04_抽象工厂模式


    【抽象工厂模式自己想的思路】

    假设一个村庄生产两种水果:苹果和芒果,某年由于滞销导致村里积累了大量苹果和芒果,为了利用起来这些水果,村里要建设两种工厂,分别是果汁加工厂和果干加工厂,在这两个加工厂中,果汁加工厂可以生产苹果汁和芒果汁,果干加工厂可以生产苹果干和芒果干,这里就涉及了我们的抽象工厂模式。

    【抽象工厂模式例子】

    package com.Higgin.AbstractFactory;
    
    /**
     * 苹果接口/抽象类  
     */
    interface Apple{
        public void getName();
        public void getColor();
    }
    
    /**
     * 苹果汁 
     */
    class AppleJuice implements Apple{
        @Override
        public void getName() {
            System.out.println("我是苹果汁!");
        }
        @Override
        public void getColor() {
            System.out.println("苹果汁,红红的!");
        }
    }
    /**
     * 苹果干 
     */
    class AppleDry implements Apple{
        @Override
        public void getName() {
            System.out.println("我是苹果干!");
        }
        @Override
        public void getColor() {
            System.out.println("苹果干,红红的!");
        }
    }
    
    /**
     * 芒果接口/抽象类 
     */
    interface Mango{
        public void getName();
        public void getColor();
    }
    /**
     * 芒果汁 
     */
    class MangoJuice implements Mango{
        @Override
        public void getName() {
            System.out.println("我是芒果汁!");
        }
        @Override
        public void getColor() {
            System.out.println("芒果汁,黄黄的!");
        }
    }
    /**
     * 芒果干 
     */
    class MangoDry implements Mango{
        @Override
        public void getName() {
            System.out.println("我是芒果干!");
        }
        @Override
        public void getColor() {
            System.out.println("芒果干,黄黄的!");
        }
    }
    
    /**
     * 水果工厂 接口/抽象类 
     */
    interface FruitFactory{
        public Apple createApple();
        public Mango createMango();
    }
    
    /**
     * 果汁工厂 
     */
    class FruitJuiceFactory implements FruitFactory{
        @Override
        public Apple createApple() {
            return new AppleJuice();
        }
        @Override
        public Mango createMango() {
            return new MangoJuice();
        }
    }
    /**
     * 果干工厂 
     */
    class FruitDryFactory implements FruitFactory{
        @Override
        public Apple createApple() {
            return new AppleDry();
        }
        @Override
        public Mango createMango() {
            return new MangoDry();
        }
    }
    /**
     * 客户端 
     */
    public class TestAbstractFactory {
        public static void main(String[] args) {
            //果汁工厂
            FruitFactory fruitJuiceFactory=new FruitJuiceFactory();
            //由果汁工厂 创建 苹果汁
            Apple appleJuice =fruitJuiceFactory.createApple();
            appleJuice.getName();
            appleJuice.getColor();
            //由果汁工厂 创建 芒果汁
            Mango mangoJuice=fruitJuiceFactory.createMango();
            mangoJuice.getName();
            mangoJuice.getColor();
            
            //果干工厂
            FruitFactory fruitDrtFactory=new FruitDryFactory();
            //由 果干工厂 得到 芒果干
            Mango mangoDry=fruitDrtFactory.createMango();
            mangoDry.getName();
            mangoDry.getColor();
            //由 果干工厂得到 苹果干
            Apple appleDry=fruitDrtFactory.createApple();
            appleDry.getName();
            appleDry.getColor();
            
        }
    }

    【运行结果】

    【抽象工厂模式的优点】

    1.封装性,每个产品的实现类不是高层模块所需要关注的,它需要关注的是接口/抽象类,它不关心对象是如何创建出来的,只要知道工厂类是谁,就能创建出一个需要的对象。

    2.产品族内的约束为非公开状态。

    【抽象工厂模式的缺点】

    扩展较为困难。主要是产品族扩展较为困难,产品等级扩展实际是非常容易的。比如,增加一个橙子产品,只要新增橙子接口和其实现类橙子汁、橙子干,再在FruitFactory中添加上创建橙子的方法。

  • 相关阅读:
    80.共享内存实现进程通信
    79.cgi硬盘查询个人信息
    78.pipe多管道云端,客户端通信
    77.邮槽通信
    76.CGI编码
    strnpy函数
    POJ 1258 Agri-Net(Prim算法)
    0X7FFFFFFF,0X80000000
    Visual C++中min()和max()函数的使用
    POJ 2421 Constructing Roads(Kruskal算法)
  • 原文地址:https://www.cnblogs.com/HigginCui/p/6204229.html
Copyright © 2020-2023  润新知