zoukankan      html  css  js  c++  java
  • 抽象工厂(Abstract Factory)

      工厂模式最终可以完成  

        1.任意定制交通工具

        2.任意定制生产过程 -- 工厂方法实现

        3.任意定制产品一族  -- 抽象工厂实现

      

    抽象工厂(Abstract Factory):提供一个创建产品族的接口,其每个子类可以生产一系列相关产品

      例如:

        现代人: 开 现代 car -用着热武器 AK47 吃着 面包

        魔法人: 骑着扫把 broom ,用着魔法棒 magicstick 吃着蘑菇 mushroom

        。。。。。。 

    定义Food、Vehicle、Weapon

    /**
     * 定义食物
     */
    public abstract class Food {
        abstract void printName();
    }
    /**
     * 定义工具
     */
    public abstract class Vehicle {
        abstract void printName();
    }
    /**
     * 定义武器
     */
    public abstract class Weapon {
        abstract void printName();
    }
    ------------------对应武器子类
    public class Ak47 extends Weapon {
        @Override
        void printName() {
            System.out.println("ak47...");
        }
    }
    public class MagicStick extends Weapon {
        @Override
        void printName() {
            System.out.println("magicstic...");
        }
    }
    ------------------对应食物子类
    public class Bread extends Food {
        @Override
        void printName() {
            System.out.println("bread...");
        }
    }
    public class Mushroom extends Food {
        @Override
        void printName() {
            System.out.println("mushroom...");
        }
    }
    ------------------对应工具子类
    public class Car extends Vehicle {
        @Override
        void printName() {
            System.out.println("car...");
        }
    }
    public class Broom extends Vehicle {
        @Override
        void printName() {
            System.out.println("broom...");
        }
    }
    

     定义抽象工厂

    /**
     * 定义一个抽象工厂
     */
    public abstract class AbastractFactory {
        abstract Food createFood();
        abstract Vehicle createVehicle();
        abstract Weapon createWeapon();
    }
    public class ModernFactory extends AbastractFactory {
        @Override
        Food createFood() {
            return new Bread();
        }
    
        @Override
        Vehicle createVehicle() {
            return new Car();
        }
    
        @Override
        Weapon createWeapon() {
            return new Ak47();
        }
    }
    public class MagicFactory extends AbastractFactory {
        @Override
        Food createFood() {
            return new Mushroom();
        }
    
        @Override
        Vehicle createVehicle() {
            return new Broom();
        }
    
        @Override
        Weapon createWeapon() {
            return new MagicStick();
        }
    }
    

      Main方法

    public class Main {
        public static void main(String[] args) {
            AbastractFactory factory = new ModernFactory();
            Food food = factory.createFood();
            Vehicle vehicle = factory.createVehicle();
            Weapon weapon = factory.createWeapon();
    
        }
    }
    

      由此可以实现 产品一族的实现

     

  • 相关阅读:
    unigui+fastreport报表打印
    MySQL索引类型总结和使用技巧以及注意事项
    Vue.js 和 MVVM
    Go -- 中结构体与字节数组能相互转化
    iOS算法合集
    postman中 form-data、x-www-form-urlencoded、raw、binary的区别
    JS注入
    JS页面间传值
    上手ReactiveCocoa之基础篇
    数据结构与算法题整理
  • 原文地址:https://www.cnblogs.com/huan30/p/12737421.html
Copyright © 2011-2022 走看看