Java设计模式之外观、享元、组合模式《三国争霸:模式风云录》

发布于:2025-04-09 ⋅ 阅读:(35) ⋅ 点赞:(0)

第一章:乱世起(外观初现)
     黄巾余孽张角三兄弟操控"混沌子系统",各地流民不堪996劳役。观国隐士诸葛孔明出山,在博望坡构建首个"军师智脑":

/​**​
 * 外观模式:军师智脑系统(简化复杂子系统调用)
 */
class StrategyFacade {
    // 子系统1:军事指挥系统
    private ArmySystem army = new ArmySystem();
    // 子系统2:后勤保障系统
    private LogisticsSystem logistics = new LogisticsSystem();
    // 子系统3:情报信息系统
    private IntelSystem intel = new IntelSystem();

    /​**​
     * 统一战略部署接口
     * @param plan 作战计划名称
     */
    public void deployStrategy(String plan) {
        System.out.println("【观国军师系统启动】");
        intel.collectInfo();        // 收集情报
        logistics.allocateResources(); // 调配资源
        army.execute(plan);         // 执行作战
    }
}

// 子系统实现类
class ArmySystem {
    public void execute(String plan) {
        System.out.println("执行「" + plan + "」作战方案");
    }
}

class LogisticsSystem {
    public void allocateResources() {
        System.out.println("调配粮草、装备等战略物资");
    }
}

class IntelSystem {
    public void collectInfo() {
        System.out.println("通过间谍网收集敌军情报");
    }
}
// main函数使用示例

"从此调兵遣将,如臂使指!"诸葛羽扇轻挥,三千流民经外观封装,竟成虎狼之师。


第二章:元国兴(享元破局)

兖州曹营,郭嘉破解《真经·享元篇》。十万青州兵装备玄铁重甲,每副甲胄却仅耗三成资源:

import java.util.*;

/​**​
 * 享元模式:玄甲军备共享池(重用大量相似对象)
 */
class ArmorFlyweight {
    // 内在状态(共享不变部分)
    private String material = "玄铁";
    private String pattern = "饕餮纹";
    
    /​**​
     * 部署装甲(外在状态由外部指定)
     * @param pos 部署坐标
     */
    public void deploy(Coordinate pos) {
        System.out.println("在("+pos.x+","+pos.y+")部署" 
            + material + pattern + "装甲");
    }
}

/​**​
 * 装甲工厂(管理共享池)
 */
class ArmorFactory {
    private static Map<String, ArmorFlyweight> pool = new HashMap<>();
    
    /​**​
     * 获取装甲实例
     * @param key 装甲类型
     */
    public static ArmorFlyweight getArmor(String key) {
        if(!pool.containsKey(key)) {
            System.out.println("创建新型号装甲:" + key);
            pool.put(key, new ArmorFlyweight());
        }
        return pool.get(key);
    }
}

// 坐标类(外在状态)
class Coordinate {
    int x, y;
    public Coordinate(int x, int y) {
        this.x = x;
        this.y = y;
    }
}

 官渡战场,袁绍五十万大军被共享装甲洪流吞没。"吾以十万甲,破百万兵!"曹操剑指江北。


第三章:合国立(组合擎天)

长江之畔,周郎观曹军艨艟战舰,悟出组合真谛:

import java.util.*;

/​**​
 * 组合模式:舰队作战体系(树形结构管理)
 */
interface MilitaryUnit {
    void deploy(); // 部署命令
}

/​**​
 * 叶子节点:单艘战船
 */
class Warship implements MilitaryUnit {
    public void deploy() { 
        System.out.println("楼船进入战斗位置"); 
    }
}

/​**​
 * 组合容器:舰队编队
 */
class FleetComposite implements MilitaryUnit {
    private List<MilitaryUnit> units = new ArrayList<>();
    
    /​**​
     * 添加作战单元
     */
    public void addUnit(MilitaryUnit unit) {
        units.add(unit);
    }
    
    /​**​
     * 递归部署整个编队
     */
    public void deploy() {
        System.out.println("【舰队展开战斗队形】");
        units.forEach(MilitaryUnit::deploy);
    }
}

 赤壁火起时,东吴舰队如魔方般重组变换。黄盖旗舰化作组合根节点,火船集群为叶节点,竟将曹军铁索连舟烧作飞灰。


第四章:三分定(模式对决)
  汉中之战,三国精锐尽出:
1.观国【为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用

public class GuanMain {
    public static void main(String[] args) {
        StrategyFacade zhuge = new StrategyFacade();
        // 调用统一接口执行作战
        zhuge.deployStrategy("火烧新野");
    }
}

# 输出:
# 【观国军师系统启动】
# 通过间谍网收集敌军情报
# 调配粮草、装备等战略物资
# 执行「火烧新野」作战方案 

2. 元国【主要用于减少创建对象的数量,以减少内存占用和提高性能。它通过共享已经存在的对象来避免创建过多的相似对象

// main函数使用示例
public class YuanMain {
    public static void main(String[] args) {
        // 模拟在三个位置部署同型装甲
        String armorType = "虎豹骑专用甲";
        
        // 获取共享装甲实例
        ArmorFlyweight armor1 = ArmorFactory.getArmor(armorType);
        ArmorFlyweight armor2 = ArmorFactory.getArmor(armorType);
        
        // 部署到不同位置(传递外在状态)
        armor1.deploy(new Coordinate(10, 20));
        armor2.deploy(new Coordinate(30, 40));
        
        System.out.println("装甲实例是否相同:" + (armor1 == armor2));
    }
}

# 输出:
# 创建新型号装甲:虎豹骑专用甲
# 在(10,20)部署玄铁饕餮纹装甲
# 在(30,40)部署玄铁饕餮纹装甲
# 装甲实例是否相同:true

3.合国 【将对象组合成树形结构以表示 “部分 - 整体” 的层次结构,使得用户对单个对象和组合对象的使用具有一致性

// main函数使用示例
public class HeMain {
    public static void main(String[] args) {
        // 创建舰队
        FleetComposite fleet = new FleetComposite();
        
        // 添加作战单元
        fleet.addUnit(new Warship());
        fleet.addUnit(new Warship());
        
        // 创建子编队
        FleetComposite subFleet = new FleetComposite();
        subFleet.addUnit(new Warship());
        fleet.addUnit(subFleet);
        
        // 执行整体部署
        fleet.deploy();
    }
}

# 输出:
# 【舰队展开战斗队形】
# 楼船进入战斗位置
# 楼船进入战斗位置
# 【舰队展开战斗队形】
# 楼船进入战斗位置 

 

终章:归晋(模式融合) 
司马懿观三家战法,在五丈原顿悟模式融合
"所谓模式,分则亡,合则昌!"当洛阳城头升起"晋"字大旗,三大模式终融为《设计真经》终极奥义——架构之道。


网站公告

今日签到

点亮在社区的每一天
去签到