zoukankan      html  css  js  c++  java
  • Java设计模式之抽象工厂模式

    一、什么是抽象工厂模式

    抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的。抽象工厂模式可以向客户端提供一个借口,使得客户端在不必指定产品的具体类型的情况下,能够创建多个产品族的产品对象。

    Fruit接口

    public interface Fruit {
        /*
         * 采集
         */
        public void get();
    }

    Apple抽象类

    public abstract class Apple implements Fruit{
        /*
         * 采集
         */
        public abstract void get();
    }

    Banana抽象类

    public abstract class Banana implements Fruit{
        /*
         * 采集
         */
        public abstract void get();
    }

    FruitFactory工厂类

    public interface FruitFactory {
        //实例化Apple
        public Fruit getApple();
        //实例化Banana
        public Fruit getBanana();
    }

    NorthFruitFactory南方工厂

    public class NorthFruitFactory implements FruitFactory {
    
        public Fruit getApple() {
            return new NorthApple();
        }
    
        public Fruit getBanana() {
            return new NorthBanana();
        }
    
    }

    SouthFruitFactory工厂类

    public class SouthFruitFactory implements FruitFactory {
    
        public Fruit getApple() {
            return new SouthApple();
        }
    
        public Fruit getBanana() {
            return new SouthBanana();
        }
    
    }

    NorthApple北方苹果类

    public class NorthApple extends Apple {
    
        public void get() {
            System.out.println("采集北方苹果");
        }
    
    }

    NorthBanana北方香蕉

    public class NorthBanana extends Banana {
    
        public void get() {
            System.out.println("采集北方香蕉");
        }
    
    }
    SouthApple 南方苹果
    public class SouthApple extends Apple {
    
        public void get() {
            System.out.println("采集南方苹果");
        }
    
    }
    SouthBanana 南方香蕉
    public class SouthBanana extends Banana {
    
        public void get() {
            System.out.println("采集南方香蕉");
        }
    
    }

    如果我们增加一个新的温室系列产品则只需要新增

    WenshiFruitFactory 温室工厂
    public class WenshiFruitFactory implements FruitFactory {
    
        public Fruit getApple() {
            return new WenshiApple();
        }
    
        public Fruit getBanana() {
            return new WenshiBanana();
        }
    
    }
    WenshiApple 温室苹果
    public class WenshiApple extends Apple {
    
        public void get() {
            System.out.println("采集温室苹果");
        }
    
    }
    WenshiBanana 温室香蕉
    public class WenshiBanana extends Banana {
    
        public void get() {
            System.out.println("采集温室香蕉");
        }
    
    }

    测试类mainclass

    public class MainClass {
        public static void main(String[] args) {
            FruitFactory ff = new NorthFruitFactory();
            Fruit apple = ff.getApple();
            apple.get();
            
            Fruit banana = ff.getBanana();
            banana.get();
            
            FruitFactory ff2= new SouthFruitFactory();
            Fruit apple2 = ff2.getApple();
            apple2.get();
            
            Fruit banana2 = ff2.getBanana();
            banana2.get();
            
            FruitFactory ff3 = new WenshiFruitFactory();
            Fruit apple3 = ff3.getApple();
            apple3.get();
            
            Fruit banana3 = ff3.getBanana();
            banana3.get();
        }
    }

    二、模式中包含的角色及其职责

    1.抽象工厂(Creator)角色
    抽象工厂模式的核心,包含对多个产品结构的声明,任何工厂类都必须实现这个接口。

    2.具体工厂( Concrete  Creator)角色
    具体工厂类是抽象工厂的一个实现,负责实例化某个产品族中的产品对象。

    3.抽象(Product)角色
    抽象模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。

    4.具体产品(Concrete Product)角色
    抽象模式所创建的具体实例对象
    总结:抽象工厂中方法对应产品结构,具体工厂对应产品族。

  • 相关阅读:
    STM32 HAL库 UART 串口读写功能笔记
    c语言数组越界的避免方法
    MOS管做开关之初理解
    keil mdk 菜单 “project” 崩溃问题解决
    51 arm x86 的大小端记录
    (C99)复合字面量
    如何的keil试试调试中,看逻辑分析仪Logic viwer
    c语言之——整型的隐式转换与溢出检测
    C语言入坑指南-缓冲区溢出
    C语言入坑指南-被遗忘的初始化
  • 原文地址:https://www.cnblogs.com/LT0314/p/3894464.html
Copyright © 2011-2022 走看看