Pattern 1. (STRATEGY pattern)
Creating systems using composition gives you a lot more flexibility. Not only does it let you encapsulate a family of algorithms into their own set of classes, but it also lets you
change behavior at runtime as long as the object you're composing with implements the correct behavior interface.
Strategy Pattern: defines a family of algorithms, encapsulates echo one, and makes them interchangeable. Strategy lets the algorithm vary independently from clients that use it.
对一个对象的一组行为(算法) 的封装, 对象可以动态的转换每个行为。
Pattern 2. (OBSERVER pattern)
Publishers + Subscribers = Observer Pattern
The Observer Pattern: defines a one-to-many dependency between objects so that when one object changes state, all of its dependents are notified and updated automatically.
Observer模式的优点是实现了表示层和数据逻辑层的分离,并定义了稳定的更新消息传递机制,类别清晰,并抽象了更新接口,使得可以有各种各样不同的表示层(观察者).
观察者模式的效果有以下几个优点:
(1)观察者模式在被观察者和观察者之间建立一个抽象的耦合。被观察者角色所知道的只是一个具体现察者聚集,每一个具体现察者都符合一个抽象观察者的接口。被观察者并不认识任何一个具体观察者,它只知道它们都有一个共同的接口。由于被观察者和观察者没有紧密地耦合在一起,因此它们可以属于不同的抽象化层次。
(2)观察者模式支持广播通信。被观察者会向所有的登记过的观察者发出通知。
观察者模式有下面的一些缺点:
(1)如果一个被观察者对象有很多直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间。
(2)如果在被观察者之间有循环依赖的话,被观察者会触发它们之间进行循环调用,导致系统崩溃。在使用观察考模式时要特别注意这一点。
(3)如果对观察者的通知是通过另外的线程进行异步投递的话,系统必须保证投递是以自恰的方式进行的。(not understand)
(4)虽然观察者模式可以随时使观察者知道所观察的对象发生了变化,但是观察者模式没有相应的机制使观察者知道所观察的对象是怎么发生变化的。
Pattern 3. (DECORATOR pattern)
通过使用修饰模式,可以在运行时扩充一个类的功能。原理是:增加一个修饰类包裹原来的类,包裹的方式一般是通过将原来的对象作为修饰类的构造函数的参数。装饰类实现新的功能,但是,在不需要用到新功能的地方,它可以直接调用原来的类中的方法。
修饰类必须和原来的类有向他的接口。
修饰模式是类继承的另外一种选择。类继承在编译时候增加行为,而装饰模式是在运行时增加行为。
Pattern 4. (FACTORY pattern)
简单工厂模式
它的组成:
1). 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java中它往往由一个具体类实现。
2). 抽象产品角色:它一般是具体产品继承的父类或者实现的接口。在java中由接口或者抽象类来实现。
3). 具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。
工厂方法模式
工厂方法模式去掉了简单工厂模式中工厂方法的静态属性,使得它可以被子类继承。这样在简单工厂模式里集中在工厂方法上的压力可以由工厂方法模式里不同的工厂子类来分担。
它的组成:
1). 抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。
2). 具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。
3). 抽象产品角色:它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来实现。
4). 具体产品角色:具体工厂角色所创建的对象就是此角色的实例。在java中由具体的类来实现。
抽象工厂模式
工厂方法(Factory Method) 抽象工厂(Abstract Factory), 这两个模式区别在于需要创建对象的复杂程度上.
抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。为了方便引进抽象工厂模式,引进一个新概念:产品族(Product Family) 。所谓产品族,是指位于不同产品等级结构,功能相关联的产品组成的家族。如图:
图中一共有四个产品族,分布于三个不同的产品等级结构中。只要指明一个产品所处的产品族以及它所属的等级结构,就可以唯一的确定这个产品。
所谓的抽象工厂是指一个工厂等级结构可以创建出分属于不同产品等级结构的一个产品族中的所有对象。如果用图来描述的话,如下图:
抽象工厂(Abstract Factory)角色: 担任这个角色的是工厂方法模式的核心,它是与应用系统商业逻辑无关的。
具体工厂(Concrete Factory)角色: 这个角色直接在客户端的调用下创建产品的实例。这个角色含有选择合适的产品对象的逻辑,而这个逻辑是与应用系统的商业逻辑紧密相关的。
抽象产品(Abstract Product)角色: 担任这个角色的类是工厂方法模式所创建的对象的父类,或它们共同拥有的接口。
具体产品(Concrete Product)角色: 抽象工厂模式所创建的任何产品对象都是某一个具体产品类的实例。这是客户端最终需要的东西,其内部一定充满了应用系统的商业逻辑。
在以下情况下应当考虑使用抽象工厂模式:
1. 一个系统不应当依赖于产品类实例如何被创建、组合和表达的细节,这对于所有形态的工厂模式都是重要的。
2. 这个系统有多于一个的产品族,而系统只消费其中某一产品族。
3. 同属于同一个产品族的产品是在一起使用的,这一约束必须在系统的设计中体现出来。
4. 系统提供一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于实现。
Pattern 5. (pattern)
分享到:
相关推荐
What general patterns can you use to help make your design more readable and understandable? It’s also about code construction. How do you write programs and make them work? “What?” you say. “I’...
标签中的“refactoring”强调了重构在软件开发中的重要地位,而“design-patterns”则提醒我们,设计模式是软件工程中不可或缺的一部分。这两个主题的结合,使得《重构-向范式前进》成为提升开发者技能和代码质量的...
### 面向对象设计与分析(Fudan Univ-Object Oriented Design Lecture Notes) #### 课程简介 本课程由复旦大学计算机科学系提供,旨在深入讲解面向对象设计(Object Oriented Design, OOD)的基本原理和技术。课程内容...
8. "Chapter8_DesignPatterns.txt" - 可能概述常见的设计模式,如工厂模式、单例模式、观察者模式等。 9. "Chapter9_OOPAdvanced.txt" - 进阶的面向对象话题,如抽象类、接口、内部类等。 10. "Chapter10_Java...
配套博客学习笔记: ://yubuntu0109.github.io/tags/design-and-pattern/ 参考书籍(推荐): 《Java设计模式 - 刘伟》 , 《图解设计模式 - [日]结城浩》 创建型模式 :check_mark:简单工厂模式( Simple Factor ...
notes, which include: Java 基础 这一部分是对Java知识的查漏补缺 Java8 JVM 异常 集合 NIO Leetcode Mark的刷题总结,保持更新 NEU Course Mark NEU AED课程的quiz题,已完结 Java Design Pattern Java Design ...
在“design-pattern-notes-master”这个压缩包中,可能包含了不同章节的学习资料,比如“第3章”和“第4章”的代码。通常,这些章节会逐步介绍各种设计模式,包括它们的意图、结构、参与者以及模式的优缺点。学习者...
leetcode题库笔记 ...Patterns: Elements of Reusable Object-Oriented Software – Erich Gamma、Richard Helm、Ralph Johnson、John Vlissides 每个 Java 程序员都应该知道的 97 件事:专家的集体智慧 务
about good software design in resource constrained environments. It is also a book about understanding what interviewers look for when you apply for an embedded systems job. Each section ends with an ...
This book teaches you how to use common design patterns for Swift, how to structure an application for Apple's platforms, and how to submit working apps to the App Store.,解压密码 share.weimo.info
变成零零散散的daily-notes,fe-notes是在daily-notes基础上归纳得到的,相较而言更加系统化。 fe-notes的每一个目录都是一个持续更新的前端知识点。有的文件夹当前可能为空,但是我会利用空余时间一点一点地完善。...
Tutorial #1 - Installing the Tools Android and Projects Tutorial #2 - Creating a Stub Project Getting Around Android Studio Contents of Android Projects Introducing Gradle and the Manifest Tutorial #3...
6. `design_patterns/` - 设计模式的实例和应用。 7. `project_management/` - 项目管理方法、工具和经验分享,如敏捷开发、Scrum等。 8. `resources/` - 参考文献、教程链接或其他有用的开发资源。 9. `tips_and_...
rust-unofficial/patterns: A catalogue of Rust design patterns Introduction - The Rust Reference Introduction - The Edition Guide Introduction - The Rust Programming Language Style Guidelines ...
This book teaches you how to use common design patterns for Swift, how to structure an application for Apple’s platforms, and how to submit working apps to the App Store. Divided into four distinct...
Tutorial #1 - Installing the Tools Android and Projects Tutorial #2 - Creating a Stub Project Getting Around Android Studio Contents of Android Projects Introducing Gradle and the Manifest Tutorial #3...
This book teaches you how to use common design patterns for Swift, how to structure an application for Apple’s platforms, and how to submit working apps to the App Store. Divided into four distinct...