好看的企业门户网站南充楼市

张小明 2025/12/27 23:17:44
好看的企业门户网站,南充楼市,本地dede网站怎么上线,创建公司需要什么条件设计模式是解决特定上下文中重复出现的问题的通用、可重用的解决方案模板#xff0c;是软件工程领域的宝贵经验总结。一、设计模式分类概览创建型模式#xff08;5种#xff09;#xff1a;对象创建的艺术单例模式#xff1a;确保一个类只有一个实例工厂方法#xff1a;创…设计模式是解决特定上下文中重复出现的问题的通用、可重用的解决方案模板是软件工程领域的宝贵经验总结。一、设计模式分类概览创建型模式5种对象创建的艺术单例模式确保一个类只有一个实例工厂方法创建对象但不指定具体类抽象工厂创建相关对象家族建造者分步构建复杂对象原型通过复制创建对象结构型模式7种对象组合的艺术适配器兼容不同接口装饰器动态添加功能代理控制对象访问外观简化复杂子系统桥接分离抽象与实现组合树形结构处理享元共享小对象节省内存行为型模式11种对象交互的艺术策略封装可互换的算法观察者一对多的依赖关系模板方法定义算法骨架迭代器顺序访问集合元素责任链传递请求的链命令封装请求为对象备忘录保存和恢复状态状态封装状态相关行为访问者分离算法与结构中介者减少对象间耦合解释器定义语言文法二、设计原则SOLID1. 单一职责原则SRP// ❌ 违反SRP - 一个类承担多个职责 class UserManager { createUser(user) { // 验证逻辑 // 保存到数据库 // 发送欢迎邮件 // 更新统计信息 } } // ✅ 遵守SRP - 每个类只有一个职责 class UserValidator { validate(user) { /* 验证逻辑 */ } } class UserRepository { save(user) { /* 数据库操作 */ } } class EmailService { sendWelcome(user) { /* 发送邮件 */ } } class StatisticsService { update(user) { /* 更新统计 */ } }2. 开闭原则OCP// ✅ 对扩展开放对修改关闭 class Discount { getDiscount(amount) { return amount * 0.1; // 默认10%折扣 } } class PremiumDiscount extends Discount { getDiscount(amount) { return amount * 0.2; // 高级用户20%折扣 } } class VIPDiscount extends Discount { getDiscount(amount) { return amount * 0.3; // VIP用户30%折扣 } } // 新增折扣类型时不需要修改现有代码 class BlackFridayDiscount extends Discount { getDiscount(amount) { return amount * 0.5; // 黑五50%折扣 } }3. 里氏替换原则LSP// ✅ 子类可以替换父类 class Bird { move() { console.log(移动); } } class FlyingBird extends Bird { fly() { console.log(飞行); } } class Penguin extends Bird { move() { console.log(游泳); } // 企鹅用游泳替代移动 } function makeBirdMove(bird) { bird.move(); // 可以传入任何Bird子类 }4. 接口隔离原则ISP// ❌ 违反ISP - 臃肿的接口 interface Worker { work(); eat(); sleep(); } // ✅ 遵守ISP - 细分的接口 interface Workable { work(); } interface Eatable { eat(); } interface Sleepable { sleep(); } class Human implements Workable, Eatable, Sleepable { work() { /* 工作 */ } eat() { /* 吃饭 */ } sleep() { /* 睡觉 */ } } class Robot implements Workable { work() { /* 工作 */ } }5. 依赖倒置原则DIP// ✅ 依赖抽象而不是具体实现 // 抽象层 interface Database { save(data); } // 具体实现 class MySQLDatabase implements Database { save(data) { /* MySQL实现 */ } } class MongoDB implements Database { save(data) { /* MongoDB实现 */ } } // 高层模块依赖抽象 class UserService { constructor(database: Database) { this.database database; } createUser(user) { // 业务逻辑... this.database.save(user); } }三、模式选择决策树四、关键模式详解1. 工厂方法模式// 产品接口 class Transport { deliver() {} } // 具体产品 class Truck extends Transport { deliver() { return 陆路运输; } } class Ship extends Transport { deliver() { return 海运; } } // 创建者 class Logistics { planDelivery() { const transport this.createTransport(); console.log(计划: ${transport.deliver()}); } createTransport() { throw new Error(必须实现); } } // 具体创建者 class RoadLogistics extends Logistics { createTransport() { return new Truck(); } } class SeaLogistics extends Logistics { createTransport() { return new Ship(); } } // 使用 const roadLogistics new RoadLogistics(); roadLogistics.planDelivery(); // 输出: 计划: 陆路运输2. 观察者模式class Subject { constructor() { this.observers []; } subscribe(observer) { this.observers.push(observer); } unsubscribe(observer) { const index this.observers.indexOf(observer); if (index -1) this.observers.splice(index, 1); } notify(data) { this.observers.forEach(observer observer.update(data)); } } class Observer { update(data) {} } // 具体实现 class NewsPublisher extends Subject { publish(news) { console.log(发布新闻: ${news}); this.notify(news); } } class Subscriber extends Observer { constructor(name) { super(); this.name name; } update(news) { console.log(${this.name} 收到新闻: ${news}); } } // 使用 const publisher new NewsPublisher(); const subscriber1 new Subscriber(用户A); const subscriber2 new Subscriber(用户B); publisher.subscribe(subscriber1); publisher.subscribe(subscriber2); publisher.publish(今日头条新闻);3. 装饰器模式class Coffee { cost() { return 5; } description() { return 普通咖啡; } } class CoffeeDecorator { constructor(coffee) { this.coffee coffee; } cost() { return this.coffee.cost(); } description() { return this.coffee.description(); } } class MilkDecorator extends CoffeeDecorator { cost() { return this.coffee.cost() 2; } description() { return this.coffee.description() 牛奶; } } class SugarDecorator extends CoffeeDecorator { cost() { return this.coffee.cost() 1; } description() { return this.coffee.description() 糖; } } // 使用 let myCoffee new Coffee(); console.log(${myCoffee.description()}: $${myCoffee.cost()}); myCoffee new MilkDecorator(myCoffee); console.log(${myCoffee.description()}: $${myCoffee.cost()}); myCoffee new SugarDecorator(myCoffee); console.log(${myCoffee.description()}: $${myCoffee.cost()});4. 策略模式class PaymentStrategy { pay(amount) {} } class CreditCardPayment extends PaymentStrategy { constructor(cardNumber) { super(); this.cardNumber cardNumber; } pay(amount) { console.log(信用卡支付 $${amount}); } } class PayPalPayment extends PaymentStrategy { constructor(email) { super(); this.email email; } pay(amount) { console.log(PayPal支付 $${amount}); } } class ShoppingCart { constructor() { this.items []; this.paymentStrategy null; } setPaymentStrategy(strategy) { this.paymentStrategy strategy; } checkout() { const total this.items.reduce((sum, item) sum item.price, 0); this.paymentStrategy.pay(total); } }5. 单例模式// 懒汉式单例 class Logger { constructor() { if (Logger.instance) { return Logger.instance; } this.logs []; Logger.instance this; return this; } log(message) { const timestamp new Date().toISOString(); this.logs.push(${timestamp}: ${message}); console.log(message); } getLogs() { return this.logs; } } // 使用 const logger1 new Logger(); const logger2 new Logger(); logger1.log(第一条日志); logger2.log(第二条日志); console.log(logger1 logger2); // true console.log(logger1.getLogs()); // 包含两条日志五、设计模式应用场景Web开发中的应用// React Hooks中的状态管理观察者模式 const [state, setState] useState(initialState); // Redux中的状态管理单例观察者 const store createStore(reducer); store.subscribe(() { const state store.getState(); // 更新UI }); // Express中间件责任链模式 app.use((req, res, next) { // 认证中间件 next(); }); app.use((req, res, next) { // 日志中间件 next(); }); // Vue/React组件组合模式 App Header / Main Sidebar / Content / /Main Footer / /App六、反模式识别常见反模式上帝对象God Object// ❌ 一个类做所有事情 class GodClass { validateUser() {} sendEmail() {} saveToDB() {} generateReport() {} processPayment() {} }重复代码// ❌ 相同的代码出现在多个地方 function calculateTax1(amount) { return amount * 0.1 amount * 0.05; } function calculateTax2(amount) { return amount * 0.1 amount * 0.05; }过度设计// ❌ 为简单的需求使用复杂的模式 // 不需要工厂模式的情况 class SimpleObjectFactory { createObject(type) { switch(type) { case A: return new A(); case B: return new B(); default: return new Default(); } } }七、实践建议何时使用设计模式场景推荐模式原因需要全局访问点单例模式如配置管理、日志记录需要创建复杂对象建造者模式如SQL查询构建器需要不同算法策略策略模式如支付方式、排序算法需要事件通知观察者模式如状态变更通知需要动态添加功能装饰器模式如中间件、权限验证需要简化复杂系统外观模式如API封装、SDK设计代码质量检查清单// 好的设计模式应用应该 // 1. 提高代码可读性 // 2. 降低耦合度 // 3. 提高可测试性 // 4. 便于扩展和维护 // 5. 遵循SOLID原则 // 自我检查问题 // - 这个模式是否解决了实际问题 // - 是否增加了不必要的复杂度 // - 是否符合团队的编码规范 // - 是否有更简单的解决方案八、学习路径建议初级阶段掌握单例、工厂、观察者、策略中级阶段理解装饰器、适配器、模板方法、命令高级阶段应用组合、访问者、中介者、状态精通阶段识别模式组合避免过度设计总结设计模式不是银弹而是工具。正确的使用方式是理解问题本质而不是生搬硬套保持简单在必要时引入复杂模式关注原则而不是具体实现持续重构让模式自然浮现模式服务于代码而不是代码服务于模式。好的设计应该让代码更清晰、更易维护而不是更复杂。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

做网站图片属性重庆荣昌网站建设价格

虚拟专用网络协议配置与故障排除全解析 1. 客户端系统VPN配置 在排查VPN问题时,若已检查ISP且服务器对其他用户连接正常,下一步就需排查客户端系统。而在排查客户端连接之前,需先对客户端进行配置。 1.1 配置Windows XP Professional VPN客户端 以下是具体步骤: 1. 选…

张小明 2025/12/27 14:30:30 网站建设

为什么无法再社保网站上做减员做网站注册哪类商标

周末有个粉丝问我:独孤,我天天刷干货、学认知,为什么还是穷?我回他一句话:你不是在学习,你是在缓急焦虑。刷信息那一刻,你就已经站错了位置。成功的人,从不做信息的消费者。大多数人…

张小明 2025/12/27 19:11:59 网站建设

中通建设工程管理公司网站seo排名优化北京

条件语句、循环和数组的深入解析 在编程中,条件语句、循环和数组是非常重要的概念,它们可以帮助我们更高效地处理数据和控制程序的流程。下面将详细介绍这些概念及其在实际编程中的应用。 1. 主输入循环示例 主输入循环是一种常见的编程结构,用于提示用户输入并从标准输入…

张小明 2025/12/27 19:11:57 网站建设

网站建设 盈利眉山专业网吧设计公司

数据编码与解码全解析 在数据处理领域,编码与解码操作至关重要,不同的格式有着不同的处理方式。本文将详细介绍 CSV、JSON 和 XML 三种常见数据格式在 Go 语言中的编码与解码方法,帮助你更好地处理和操作数据。 1. CSV 数据处理 在 Go 语言中,处理 CSV 数据非常方便,我…

张小明 2025/12/27 19:11:55 网站建设

河北手机响应式网站建设设计中国无法访问wordpress

面向对象是C编程语言的重要特征, 也是C与C语言显著区别的重要标志, 那什么是面向对象呢? 什么是面向对象 这里的对象并不是指我们的男女朋友, 而是由"Object"所翻译, 指的是具体的物体, 与之相对应的是抽象的类, 类和对象的关系就是物体的普遍性和特殊性的关系, 即一…

张小明 2025/12/27 19:11:54 网站建设

免费自助建站软件公司网站管理

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…

张小明 2025/12/27 19:11:52 网站建设