我想通过实时示例学习设计模式。那么任何人都可以建议我可以从哪里开始。
答案 0 :(得分:18)
注意:使用现实生活和Java API示例添加简要定义。
您想如何创建对象?
原型:要复制或克隆的完全初始化的实例 示例:国际象棋比赛的初始状态
java.lang.Object#clone()
构建器 - 将复杂对象的构造与其表示分开,以便相同的构造过程可以创建不同的表示
示例:厨房是工厂,厨师是生成器,服务员告诉厨师"披萨配奶酪,洋葱和#34;。这里厨师暴露属性但隐藏实现。
Singleton - 只有一个实例可以存在的类
示例:一个国家的总统
工厂方法 - 创建多个派生类的实例 示例:在组织中,HR用作工厂方法。这里开发团队要求HR需要资源类型。根据请求类型,HR为开发团队提供资源。
抽象工厂 - 创建几个类族的实例 示例:HP,Samsung和Dell笔记本电脑均采用Intel和AMD处理器。
Factory Method vs Abstract Factory
这种设计模式是关于类和对象的组合,即如何构建软件组件。
代理 - 表示另一个对象的对象
示例:支票簿,信用卡,借记卡是Money的代理商,客户代表可以订购产品。
复合 - 为叶子和复合提供统一的界面
示例:操作系统中的文件系统,目录是复合的,文件是离开的。系统调用Open
是复合和叶子的单一界面。
装饰器 - 为leaf提供附加功能,同时提供统一界面 示例:1)在订单上添加折扣2)枪支是它自己的致命武器。但你可以申请某些装饰品#34;使它更准确,沉默和毁灭性。
Facade - 使用单一界面简化多个复杂组件 示例:控制面板
适配器 - 为界面提供不同的界面 示例:电源适配器
Flyweight - 用于高效共享的细粒度实例 示例:拨号音
这种设计模式是关于Class对象的通信,即你想如何在软件中进行行为?
责任链 - 在一系列对象之间传递请求的方法
示例:贷款或休假审批流程
迭代器 - 按顺序访问集合的元素
示例:电视上的下一个/上一个按钮
状态 - 在状态更改时更改对象的行为 示例:风扇墙控件
观察者 - 通知更改多个班级的方法
示例:出价或拍卖
访问者 - 定义类的新操作而不进行更改 示例:出租车
模板 - 将算法的确切步骤推迟到子类
示例:蓝色打印
命令 - 将命令请求封装为对象
示例:"来宾检查"在用餐者是命令模式的一个例子。服务员或女服务员接受客户的订单或命令,并通过将其写入支票来封装该订单。然后该订单排队等待短期烹饪。注意"的垫子检查"每个服务员使用的菜单都不依赖于菜单,因此他们可以支持烹饪许多不同项目的命令。
Memento - 捕获并恢复对象的内部状态
示例:在游戏中保存状态&在Windows中撤消/重做操作
Mediator - 定义类之间的简化通信
示例:空中交通管制员(ATC)
策略 - 策略定义了一组可互换使用的算法 示例:运输方式
答案 1 :(得分:2)
我相信这些是两个标准参考:
据我所知,第一个更容易入手。
我采取了调查此步骤的步骤:
答案 2 :(得分:0)
如果您正在寻找C#设计模式,请参阅:
'C#Design Patters a tutorial' - Jame W Cooper
答案 3 :(得分:0)
现在这里有一个可以吸引大量投票的答案。但我会告诉它。
我的建议是,“不要学习设计模式!!!”
坚持设计模式,限制你的创造力。此外,一些设计模式有不好的一面,他们没有告诉你。例如,如果不小心使用,Singleton模式可能会导致问题。
此外,IMO,一些着名的设计模式是用一种语言创建的,以解决该语言的特定问题。但是,像Python和Javascript这样的进化语言可以非常惊人地使用,而不会影响设计模式。
不是学习设计模式,而是学习编程范式和内部概念。我将复制粘贴以下维基百科列表,
当然,您可以阅读标准设计模式以获得一些基本概念。但是不要从A到Z学习它们。它会破坏你的创造力。