`

OO设计模式小结

阅读更多
引用自<head first design pattern>以及wiki

OO : Abstraction; Encapsulation; Polymorphism; Inheritance

OO principle:
    * Encapsulate what varies.(basic rule, Strategy Pattern)封装变化;
    * Favor composition over inheritance.多用组合,少用继承;
    * Program to interfaces, not implementations.针对接口编程,不针对实现编程;
    * Strive for loosely coupled designs between objects that interact.为交互对象之间的松耦合设计而努力;
    * Classes should be open for extension but closed for modification.类应该对扩展开放,对修改关闭;
    * Depend on abstractions. Do not depend on concrete classes.(The Dependency Inversion Principle)依赖抽象,不要依赖具体类;
    * Only talk to your friends.(Principle of Least Knowledge)只和朋友交谈;
    * Don't call us, we'll call you.(The Hollywood Principle,High-level components control when and how low-level components can participate in the computation. But never call high-level components directly.)别找我,我会找你;
    * A class should have only one reason to change.(Single Responsibility Principle)类应该只有一个改变的理由;

Creational patterns:
Abstract factory : Provide an interface for creating families of related or dependent objects without specifying their concrete classes.
Factory method : Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory Method lets a class defer instantiation to subclasses.
Builder : Separate the construction of a complex object from its representation so that the same construction process can create different representations.
Prototype: Specify the kinds of objects to create using a prototypical instance, and create new objects by copying this prototype.
Singleton : Ensure a class has only one instance, and provide a global point of access to it.

Structural patterns:
Adapter : Convert the interface of a class into another interface clients expect. Adapter lets classes work together that couldn't otherwise because of incompatible interfaces
Bridge : Decouple an abstraction from its implementation so that the two can vary independently.
Composite : Compose objects into tree structures to represent part-whole hierarchies. Composite lets clients treat individual objects and compositions of objects uniformly.
Decorator: Attach additional responsibilities to an object dynamically keeping the same interface. Decorators provide a flexible alternative to subclassing for extending functionality.
Facade : Provide a unified interface to a set of interfaces in a subsystem. Facade defines a higher-level interface that makes the subsystem easier to use.
Flyweight: Use sharing to support large numbers of fine-grained objects efficiently.
Proxy : Provide a surrogate or placeholder for another object to control access to it.

Behavioral patterns
Chain of responsibility : Avoid coupling the sender of a request to its receiver by giving more than one object a chance to handle the request. Chain the receiving objects and pass the request along the chain until an object handles it.
Command : Encapsulate a request as an object, thereby letting you parameterize clients with different requests, queue or log requests, and support undoable operations.
Interpreter: Given a language, define a representation for its grammar along with an interpreter that uses the representation to interpret sentences in the language.
Iterator : Provide a way to access the elements of an aggregate object sequentially without exposing its underlying representation.
Mediator : Define an object that encapsulates how a set of objects interact. Mediator promotes loose coupling by keeping objects from referring to each other explicitly, and it lets you vary their interaction independently.
Memento : Without violating encapsulation, capture and externalize an object's internal state so that the object can be restored to this state later.
Observer : Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically.
State : Allow an object to alter its behavior when its internal state changes. The object will appear to change its class.
Strategy : Define a family of algorithms, encapsulate each one, and make them interchangeable. Strategy lets the algorithm vary independently from clients that use it.
Template method : Define the skeleton of an algorithm in an operation, deferring some steps to subclasses. Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm's structure.
Visitor : Represent an operation to be performed on the elements of an object structure. Visitor lets you define a new operation without changing the classes of the elements on which it operates.


/** 
  * State 
  */
public class GumballMachine {
    State souldOutStates;
    State noQuarterStates;
    State hasQuarterStates;
    State souldStates;
    State winnerStates;

    State state=souldOutState;
    int count=0;
  
    ...
}


/** Flyweight Pattern
  * 用途:当一个类有许多的实例,而这些实例能被统一方法控制的时候。提高效率
  * 优点:减少运行时对象实例的个数,节省内存;将许多“虚拟”对象的状态集中管理;
  * 缺点:单个的逻辑实例将无法拥有独立而不同的行为
  * /
//in pattern
public class TreeManager{
    ArrayList treeArray;

    displayTrees(){
    //设置所有树的数组位置
         display(x,y,age);
    }
}

class Tree{       //一个单独的没有状态的树对象
    display(x,y,age){}
}

//withoutPattern
public class Tree{
    int xCoord;
    int yCoord;
    int age;
    
    display(){}
}

分享到:
评论

相关推荐

    OO设计原则总结

    关于设计模式的一些总结介绍!

    设计模式精解-GoF 23种设计模式解析附C++实现源码

    懂了设计模式,你就懂了面向对象分析和设计(OOA/D)的精要。...这也是我们软件设计所准求的,因此无论是OO中的封装、继承、多态,还是我们的设计模式的原则和实例都是在为了这两个目标努力着、贡献着。

    设计模式,软件开发者必读

    设计模式的个人总结教材,适合IT专业人士研究,目录如下: 序言 概念 6 1.1 设计模式的定义 6 1.2 设计模式的作用 6 1.3 设计模式的由来 6 1.4 设计模式的分类 7 1.5 OO设计七原则 7 1.5.1 开-闭原则(OPEN-CLOSED ...

    基于面向对象(OO)的数据库设计模式探讨

    内容面向对象的数据库设计对象关系模型实体对象关系模型应用总结下载参考资料简介: 面向对象(OO)和三范式(3NF)都是成熟的设计方法,本文基于面向对象设计思想和三范式数据库设计方法,提出一种实体对象分层...

    springboot基于OO模式的短租平台计算机毕业生设计.zip

    采用java技术构建的一个管理系统。整个开发过程首先对系统进行需求分析,得出...最后对系统进行功能测试,并对测试结果进行分析总结。 包括程序毕设程序源代码一份,数据库一份,完美运行。内附配置环境里面有说明。

    实战OO的pdf自留备份

    杂志节选,管理类,软件开发流程分析,其中介绍的OO技巧和方法,自留备份的文档。为问题域建模,用例建模,鲁棒分析,交互建模,过程总结,部署与实施,开启征程结尾篇。

    领域驱动设计与模式实战

    2.4 针对具体应用程序类型的设计模式 2.5 领域模式 2.6 小结 第3章 TDD与重构 3.1 TDD 3.1.1 TDD流程 3.1.2 演示 3.1.3 设计效果 3.1.4 问题 3.1.5 下一个阶段 3.2 模拟和桩 3.2.1 典型单元测试 3.2.2 声明独立性 ...

    写给大家看的面向对象编程书(第三版)

    第1章 面向对象概念介绍 1.1 过程式程序设计与OO程序设计 1.2 从过程式开发转向面向对象开发 1.3 对象到底是什么 1.4 类到底是什么 1.5 使用UML完成类图建模 1.6 封装和数据隐藏 ...第15章 设计模式 索引

    asp.net知识库

    C#静态成员和方法的学习小结 C#中结构与类的区别 C#中 const 和 readonly 的区别 利用自定义属性,定义枚举值的详细文本 Web标准和ASP.NET - 第一部分 XHTML介绍 在ASP.NET页面中推荐使用覆写(Override)而不是事件...

    UML和模式应用(架构师必备).part06.rar

    17.4 GRASP:基本OO设计的系统方法 17.5 职责、GRASP和UML图之间的联系 17.6 什么是模式 17.7 现在我们所处的位置 17.8 使用GRASP进行对象设计的简短示例 17.9 在对象设计中应用GRASP 17.10 创建者 17.11 ...

    写给大家看的面向对象编程书(第3版).[美]Matt Weisfeld(带详细书签).pdf

    1.10 小结 21 1.11 本章使用的示例代码 21 1.11.1 TestPerson示例:C#.NET 21 1.11.2 TestPerson示例:VB.NET 22 1.11.3 TestShape示例:C#.NET 23 1.11.4 TestShape示例:VB.NET 25 第2章 如何以对象方式思考...

    UML和模式应用(架构师必备).part02.rar

    17.4 GRASP:基本OO设计的系统方法 17.5 职责、GRASP和UML图之间的联系 17.6 什么是模式 17.7 现在我们所处的位置 17.8 使用GRASP进行对象设计的简短示例 17.9 在对象设计中应用GRASP 17.10 创建者 17.11 ...

    【JavaScript源代码】JS实现单例模式的6种方案汇总.docx

     今天在复习设计模式中的-创建型模式,发现JS实现单例模式的方案有很多种,稍加总结了一下,列出了如下的6种方式与大家分享 大体上将内容分为了ES5(Function)与ES6(Class)实现两种部分 单例模式就是在系统中...

    UML和模式应用(架构师必备).part01.rar

    17.4 GRASP:基本OO设计的系统方法 17.5 职责、GRASP和UML图之间的联系 17.6 什么是模式 17.7 现在我们所处的位置 17.8 使用GRASP进行对象设计的简短示例 17.9 在对象设计中应用GRASP 17.10 创建者 17.11 ...

    UML和模式应用(架构师必备).part07.rar

    17.4 GRASP:基本OO设计的系统方法 17.5 职责、GRASP和UML图之间的联系 17.6 什么是模式 17.7 现在我们所处的位置 17.8 使用GRASP进行对象设计的简短示例 17.9 在对象设计中应用GRASP 17.10 创建者 17.11 ...

    UML和模式应用(架构师必备).part03.rar

    17.4 GRASP:基本OO设计的系统方法 17.5 职责、GRASP和UML图之间的联系 17.6 什么是模式 17.7 现在我们所处的位置 17.8 使用GRASP进行对象设计的简短示例 17.9 在对象设计中应用GRASP 17.10 创建者 17.11 ...

    UML和模式应用(架构师必备).part04.rar

    17.4 GRASP:基本OO设计的系统方法 17.5 职责、GRASP和UML图之间的联系 17.6 什么是模式 17.7 现在我们所处的位置 17.8 使用GRASP进行对象设计的简短示例 17.9 在对象设计中应用GRASP 17.10 创建者 17.11 ...

    UML和模式应用(架构师必备).part08.rar

    17.4 GRASP:基本OO设计的系统方法 17.5 职责、GRASP和UML图之间的联系 17.6 什么是模式 17.7 现在我们所处的位置 17.8 使用GRASP进行对象设计的简短示例 17.9 在对象设计中应用GRASP 17.10 创建者 17.11 ...

Global site tag (gtag.js) - Google Analytics