第一章:乱世起(外观初现)
黄巾余孽张角三兄弟操控"混沌子系统",各地流民不堪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();
}
}
# 输出:
# 【舰队展开战斗队形】
# 楼船进入战斗位置
# 楼船进入战斗位置
# 【舰队展开战斗队形】
# 楼船进入战斗位置
终章:归晋(模式融合)
司马懿观三家战法,在五丈原顿悟模式融合
"所谓模式,分则亡,合则昌!"当洛阳城头升起"晋"字大旗,三大模式终融为《设计真经》终极奥义——架构之道。