admin管理员组文章数量:1650778
当然,下面我将尽量用生活中的例子来通俗地解释这些设计模式的作用和意义:
-
原型(Prototype)模式:想象你要开一家咖啡店,每种咖啡你都先做一杯完美的样品(原型),之后需要时就快速复制这杯样品,而不是每次都从头调配。这样可以高效地创建相似的对象。
-
工厂方法(Factory Method)模式:假设你要开一个快餐连锁店,每个分店都需要制作汉堡,但不同地区可能口味有变。总部不直接规定如何做汉堡,而是提供一个“制作汉堡”的标准流程(工厂方法),让各分店根据这个流程自己决定具体怎么做。
-
抽象工厂(Abstract Factory)模式:还是快餐连锁的例子,除了汉堡,还有薯条、饮料等。抽象工厂就是定义一个接口,可以生产一系列相关的产品(比如一套快餐组合),而具体的产品族由各个子工厂实现,保证了产品间的兼容性。
-
单例(Singleton)设计模式:学校里只有一个校长办公室,无论哪个老师或学生需要找校长,都去同一个地方。单例模式确保一个类在整个应用中只存在一个实例,并提供全局访问点。
-
生成器(Builder)模式:你去定制一台电脑,销售员会给你一张清单,让你勾选CPU、内存、硬盘等配置,然后根据你的选择组装出电脑。生成器模式就是一步步构造复杂对象,用户只需指定需要的组件,而不需要知道构建过程。
-
适配器(Adapter Pattern)模式:出国旅行需要转换插头,适配器让不同国家的电器能在本地插座上使用。在编程中,适配器让原本不兼容的接口能够协同工作。
-
桥接(Bridge)模式:手机壳和手机的关系,手机壳(外观)可以独立于手机品牌(功能)变化。桥接模式分离抽象和实现,让两者可以独立变化。
-
外观(Facade)模式:酒店前台就是一个外观,顾客不用关心房间清洁、餐饮准备等细节,只需与前台沟通即可。外观模式提供了一个统一的接口,简化了复杂的系统调用。
-
中介者(Mediator)模式:租房平台协调房东和租客之间的沟通,避免他们直接联系产生混乱。中介者模式定义一个中间人来封装多个对象间的交互,降低耦合度。
-
观察者(Observer)模式:新闻订阅,一旦有新文章发布,所有订阅者都会收到通知。观察者模式定义了对象之间的一对多依赖关系,当一个对象的状态改变时,所有依赖它的对象都会得到通知并自动更新。
-
组合(Composite)模式:公司组织结构,既有部门经理也有普通员工,但都可以看作“员工”来处理。组合模式允许你以一致的方式处理个体对象和组合对象。
-
迭代器(Iterator Pattern)模式:图书馆的书架,你可以通过一个指针(迭代器)逐本访问书架上的每一本书,而无需了解书架的内部结构。
-
访问者(Visitor Pattern)模式:想象一个房屋检查员,他可以访问不同类型的房间(卧室、厨房),并根据房间类型执行不同的检查操作。访问者模式让你能够在不修改对象结构的情况下,为对象添加新的操作。
-
装饰器(Decorator)模式:在咖啡上加奶泡、巧克力粉等,每次加料都是在原有基础上增加一层装饰,但基础咖啡不变。装饰器模式动态地给对象添加额外的功能。
-
责任链(Chain of Responsibility)模式:报销审批流程,如果金额小于一定数目,主管审批;否则,提交给经理。每个审批节点不知道下一个节点是谁,形成一条责任链。
-
状态(State Pattern)模式:自动贩卖机根据投入的硬币数量改变状态,从而决定是否可以购买商品。状态模式允许对象在内部状态改变时改变其行为。
-
策略(Strategy)模式:快递公司的配送策略,可以是陆运、空运或海运,根据客户选择和成本考虑动态切换。策略模式定义了一系列算法,并在运行时选择使用哪一个。
-
命令(Command)模式:遥控器上的按钮,按下播放键就发送播放命令给电视。命令模式将请求封装成对象,方便参数化、队列化和日志化操作。
-
享元(Flyweight)模式:文档编辑软件中字符的显示,虽然文档可能有成千上万个字母,但每个字母的字体、颜色等属性只需存储一份。享元模式通过共享技术减少大量相似对象的内存消耗。
-
代理(Proxy Pattern)模式:明星经纪人,粉丝通过经纪人联系明星,经纪人可以做一些预处理或过滤工作。代理模式为其他对象提供一个代理以控制对这个对象的访问。
-
备忘录(Memento Pattern)模式:游戏存档,玩家可以保存当前状态,之后随时恢复。备忘录模式在不破坏封装性的前提下,捕获一个对象的内部状态,并在将来恢复它。
版权声明:本文标题:编程语言常用的 21种设计模式 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dongtai/1729539579a1205346.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论