//!# encoding: utf-8 //!# 版权所有 2026 ©涂聚文有限公司™ ® //!# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 //!# 描述:Design Patterns //!# Author : geovindu,Geovin Du 涂聚文. //!# IDE : RustRover 2025.1.1 Rust rustc 1.98.1 //!# os : windows 10 //!# database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j //!# Datetime : 2026/9/25 20:54 //!# User : geovindu //!# Product : RustRover //!# Project : RustDesignPatterns //!# File : check_patterns.rs // encoding: utf-8 // 版权所有 2026 ©涂聚文有限公司™ ® // Author : geovindu,Geovin Du 涂聚文. // 设计模式枚举,调度各bll demo,对标Python CheckPatterns.py use crate::bll; use crate::lang::{PATTERN_ENUM_MAP,current_lang_code}; use tokio; #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] pub enum DesignPattern { Memento, Command, State, TemplateMethod, Visitor, Strategy, Observe, Mediator, Iterator, ChainofResponsibility, Proxy, Flyweight, Facade, Decorator, Composite, Singleton, Prototype, Bridge, Adapter, Builder, AbstractFactory, Factory, SimpleFactory, FactoryMethod, NullObject, Interpreter, Registry, Borg, LazyEvaluation, Pool, ConditionVariable, Mutex, Monitor, ReadWriteLock, Semaphore, NBarrier, BoundedParallelism, Broadcast, Coroutines, Generators, Reactor, Parallelism, ProducerConsumer, FanIn, FanOut, Pipeline, WorkerPool, FuturesPromises, PublishSubscribe, PushPull, Bulkheads, CircuitBreaker, Deadline, FailFast, Handshaking, SteadyState, TimingFunctions, FunctionalOptions, CascadingFailures, ThreadPool, Watchdog, Barrier, Future, MessageQueue, RateLimiter, Retry, AntiGodObject, AntiSpaghetti, AntiLavaFlow, } impl DesignPattern { /// 枚举名称转中文,对标Python _name_to_cn pub fn name_to_cn(&self)->String{ let name = format!("{:?}",self); let map = PATTERN_ENUM_MAP.get().unwrap(); if let Some(arr) = map.get(name.as_str()){ let idx = match current_lang_code(){ 1=>0, 2=>1, _=>2, }; arr[idx].to_string() }else{ name } } /// 执行demo示例,对标 show_example() pub fn show_example(&self){ println!("\n===== 展示【{} Pattern({})】示例 =====",format!("{:?}",self),self.name_to_cn()); match self { DesignPattern::Memento => bll::memento_bll::MementoBll::demo(), DesignPattern::Command => bll::command_bll::CommandBll::demo(), DesignPattern::State => bll::state_bll::StateBll::demo(), DesignPattern::TemplateMethod => bll::templatemethod_bll::TemplateMethodBll::demo(), DesignPattern::Visitor => bll::visitor_bll::VisitorBll::demo(), DesignPattern::Strategy => bll::strategy_bll::StrategyBll::demo(), DesignPattern::Observe => bll::observe_bll::ObserveBll::demo(), DesignPattern::Mediator => bll::mediator_bll::MediatorBll::demo(), DesignPattern::Iterator => bll::iterator_bll::IteratorBll::demo(), DesignPattern::ChainofResponsibility => bll::chainofresponsibility_bll::ChainofResponsibilityBll::dudemo(), DesignPattern::Proxy => bll::proxy_bll::ProxyBll::demo(), DesignPattern::Flyweight => bll::flyweight_bll::FlyweightBll::demo(), DesignPattern::Facade => bll::facade_bll::FacadeBll::demo(), DesignPattern::Decorator => bll::decorator_bll::DecoratorBll::demo(), DesignPattern::Composite => bll::composite_bll::CompositeBll::demo(), DesignPattern::Singleton => bll::singleton_bll::SingletonBll::demo(), DesignPattern::Prototype => bll::prototype_bll::PrototypeBll::demo(), DesignPattern::Bridge => bll::bridge_bll::BridgeBll::demo(), DesignPattern::Adapter => bll::adapter_bll::AdapterBll::demo(), DesignPattern::Builder => bll::builder_bll::BuilderBll::demo(), DesignPattern::AbstractFactory => bll::abstractfactory_bll::AbstractFactoryBll::demo(), DesignPattern::Factory => bll::factory_bll::FactoryBll::demo(), DesignPattern::SimpleFactory => bll::simplefactory_bll::SimpleFactoryBll::demo(), DesignPattern::FactoryMethod => bll::factorymethod_bll::FactoryMethodBll::demo(), DesignPattern::NullObject => bll::nullobject_bll::NullObjectBll::demo(), DesignPattern::Interpreter => bll::interpreter_bll::InterpreterBll::demo(), DesignPattern::Registry => bll::registry_bll::RegistryBll::demo(), DesignPattern::ConditionVariable => bll::conditionvariable_bll::ConditionVariableBll::demo(), DesignPattern::Mutex => bll::mutex_bll::MutexBll::demo(), DesignPattern::Monitor => bll::monitor_bll::MonitorBll::demo(), DesignPattern::ReadWriteLock => bll::readwritelock_bll::ReadWriteLockBll::demo(), DesignPattern::Semaphore => bll::semaphore_bll::SemaphoreBll::demo(), DesignPattern::NBarrier => bll::nbarrier_bll::NBarrierBll::demo(), DesignPattern::BoundedParallelism => bll::boundedparallelism_bll::BoundedParallelismBll::demo(), DesignPattern::Broadcast => bll::broadcast_bll::BroadcastBll::demo(), DesignPattern::Coroutines => { // 异步demo,tokio运行,对标asyncio.run let rt = tokio::runtime::Runtime::new().unwrap(); rt.block_on(bll::coroutines_bll::CoroutinesBll::demo()); } DesignPattern::Generators => bll::generators_bll::GeneratorsBll::demo(), DesignPattern::Reactor => bll::reactor_bll::ReactorBll::demo(), DesignPattern::Parallelism => bll::parallelism_bll::ParallelismBll::demo(), DesignPattern::ProducerConsumer => bll::producerconsumer_bll::ProducerConsumerBll::demo(), DesignPattern::FanIn => bll::fanin_bll::FanInBll::demo(), DesignPattern::FanOut => bll::fanout_bll::FanOutBll::demo(), DesignPattern::Pipeline => bll::pipeline_bll::PipelineBll::demo(), DesignPattern::WorkerPool => bll::workerpool_bll::WorkerPoolBll::demo(), DesignPattern::FuturesPromises => bll::futurespromises_bll::FuturesPromisesBll::demo(), DesignPattern::PublishSubscribe => bll::publishsubscribe_bll::PublishSubscribeBll::demo(), DesignPattern::PushPull => bll::pushpull_bll::PushPullBll::demo(), DesignPattern::Bulkheads => bll::bulkheads_bll::BulkheadsBll::demo(), DesignPattern::CircuitBreaker => bll::circuitbreaker_bll::CircuitBreakerBll::demo(), DesignPattern::Deadline => bll::deadline_bll::DeadlineBll::demo(), DesignPattern::FailFast => bll::failfast_bll::FailFastBll::demo(), DesignPattern::Handshaking => bll::handshaking_bll::HandshakingBll::demo(), DesignPattern::SteadyState => bll::steadystate_bll::SteadyStateBll::demo(), DesignPattern::TimingFunctions => bll::timingfunctions_bll::TimingFunctionsBll::demo(), DesignPattern::FunctionalOptions => bll::functionaloptions_bll::FunctionalOptionsBll::demo(), DesignPattern::CascadingFailures => bll::cascadingfailures_bll::CascadingFailuresBll::demo(), DesignPattern::ThreadPool => bll::threadpool_bll::ThreadPoolBll::demo(), DesignPattern::Watchdog => bll::watchdog_bll::WatchdogBll::demo(), DesignPattern::Barrier => bll::barrier_bll::BarrierBll::demo(), DesignPattern::Future => bll::future_bll::FutureBll::demo(), DesignPattern::MessageQueue => bll::messagequeue_bll::MessageQueueBll::demo(), DesignPattern::RateLimiter => bll::ratelimiter_bll::RateLimiterBll::demo(), DesignPattern::Retry => bll::retry_bll::RetryBll::demo(), DesignPattern::AntiGodObject => bll::antigodobject_bll::AntiGodObjectBll::demo(), DesignPattern::AntiSpaghetti => bll::antispaghetti_bll::AntiSpaghettiBll::demo(), DesignPattern::AntiLavaFlow => bll::antilavaflow_bll::AntiLavaFlowBll::demo(), DesignPattern::Borg => unimplemented!("Borg模式待实现"), DesignPattern::LazyEvaluation => unimplemented!("LazyEvaluation模式待实现"), DesignPattern::Pool => unimplemented!("对象池简写模式待实现"), } } /// 把枚举转为迭代列表,用于菜单遍历 pub fn all() -> &'static [DesignPattern] { &[ DesignPattern::Memento, DesignPattern::Command, DesignPattern::State, DesignPattern::TemplateMethod, DesignPattern::Visitor, DesignPattern::Strategy, DesignPattern::Observe, DesignPattern::Mediator, DesignPattern::Iterator, DesignPattern::ChainofResponsibility, DesignPattern::Proxy, DesignPattern::Flyweight, DesignPattern::Facade, DesignPattern::Decorator, DesignPattern::Composite, DesignPattern::Singleton, DesignPattern::Prototype, DesignPattern::Bridge, DesignPattern::Adapter, DesignPattern::Builder, DesignPattern::AbstractFactory, DesignPattern::Factory, DesignPattern::SimpleFactory, DesignPattern::FactoryMethod, DesignPattern::NullObject, DesignPattern::Interpreter, DesignPattern::Registry, DesignPattern::Borg, DesignPattern::LazyEvaluation, DesignPattern::Pool, DesignPattern::ConditionVariable, DesignPattern::Mutex, DesignPattern::Monitor, DesignPattern::ReadWriteLock, DesignPattern::Semaphore, DesignPattern::NBarrier, DesignPattern::BoundedParallelism, DesignPattern::Broadcast, DesignPattern::Coroutines, DesignPattern::Generators, DesignPattern::Reactor, DesignPattern::Parallelism, DesignPattern::ProducerConsumer, DesignPattern::FanIn, DesignPattern::FanOut, DesignPattern::Pipeline, DesignPattern::WorkerPool, DesignPattern::FuturesPromises, DesignPattern::PublishSubscribe, DesignPattern::PushPull, DesignPattern::Bulkheads, DesignPattern::CircuitBreaker, DesignPattern::Deadline, DesignPattern::FailFast, DesignPattern::Handshaking, DesignPattern::SteadyState, DesignPattern::TimingFunctions, DesignPattern::FunctionalOptions, DesignPattern::CascadingFailures, DesignPattern::ThreadPool, DesignPattern::Watchdog, DesignPattern::Barrier, DesignPattern::Future, DesignPattern::MessageQueue, DesignPattern::RateLimiter, DesignPattern::Retry, DesignPattern::AntiGodObject, DesignPattern::AntiSpaghetti, DesignPattern::AntiLavaFlow, ] } }
//!# encoding: utf-8 //!# 版权所有 2026 ©涂聚文有限公司™ ® //!# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 //!# 描述:Design Patterns //!# Author : geovindu,Geovin Du 涂聚文. //!# IDE : RustRover 2025.1.1 Rust rustc 1.98.1 //!# os : windows 10 //!# database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j //!# Datetime : 2026/9/25 20:52 //!# User : geovindu //!# Product : RustRover //!# Project : RustDesignPatterns //!# File : main.rs // encoding: utf-8 // 版权所有 2026 ©涂聚文有限公司™ ® // Author : geovindu,Geovin Du 涂聚文. // IDE : VS Code / RustRover // os : windows 10 // Project : pydesignpattern-rs use std::io; use controller::DesignPattern; use crate::lang::{init_lang_map,set_language}; mod controller; mod lang; mod bll; /// 返回 (序列号, Option<DesignPattern>),0=退出 fn select_design_pattern()->(usize,Option<DesignPattern>){ println!("{}",lang::TITLE_MENU); println!("{} 0/{} {}",lang::PROMPT_INPUT_NUM,lang::KEY_QUIT,lang::TITLE_EXIT_OPT); let pattern_list = DesignPattern::all(); for (idx,pat) in pattern_list.iter().enumerate(){ let display_name = pat.name_to_cn(); println!("{}. {}({:?})",idx+1,display_name,pat); } println!("0. {}",lang::TITLE_EXIT_OPT); loop{ println!("\n{}",lang::PROMPT_INPUT_NUM); let mut buf = String::new(); io::stdin().read_line(&mut buf).unwrap(); let input = buf.trim(); if input == "0" || input.eq_ignore_ascii_case("q"){ println!("👋 {}",lang::MSG_EXIT_PROGRAM); return (0,None); } let Ok(choice) = input.parse::<usize>() else { println!("{}",lang::MSG_INVALID_INPUT); continue; }; let max = pattern_list.len(); if choice >=1 && choice <= max{ let selected = pattern_list[choice-1]; let cn_name = selected.name_to_cn(); println!("{}{}(对应{})",lang::MSG_SELECTED_ITEM,choice,cn_name); return (choice,Some(selected)); }else{ println!("{} 1-{}",lang::MSG_INVALID_INPUT,max); } } } /// 是否继续选择 fn ask_continue()->bool{ loop{ println!("{}:",lang::PROMPT_CONTINUE_ASK); let mut buf = String::new(); io::stdin().read_line(&mut buf).unwrap(); let input = buf.trim().to_lowercase(); if input == lang::KEY_YES{ return true; }else if input == lang::KEY_NO{ println!("👋 {}",lang::MSG_EXIT_PROGRAM); return false; }else{ println!("{} {}/{}",lang::MSG_INVALID_INPUT,lang::KEY_YES,lang::KEY_NO); } } } fn main() { // 初始化语言映射 init_lang_map(); // 默认简体中文 set_language(1); println!("{}",lang::PROMPT_CHOOSE_LANG); let mut buf = String::new(); io::stdin().read_line(&mut buf).unwrap(); let code = buf.trim().parse::<u8>().unwrap_or(1); set_language(code); println!("{}",lang::TITLE_MAIN); loop{ let (selected_num, selected_pattern) = select_design_pattern(); if selected_num == 0{ println!("👋 {}",lang::MSG_EXIT_PROGRAM); break; } let pat = selected_pattern.unwrap(); let en_name = format!("{:?}",pat); let cn_name = pat.name_to_cn(); println!("{}",lang::MSG_SHOW_PATTERN_HEAD.replace("{}","{}").replace("{}",&en_name).replace("{}",&cn_name)); pat.show_example(); println!("\n📌 本次选择的序列号是:{}",selected_num); if !ask_continue(){ break; } } println!("hi,welcome geovindu."); }
![]()