设计模式之Builder Builder模式定义: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. Builder模式是一步一步创建一个复杂的对象,它允许用户可以只通过指定复杂对象的类型和内容就可以构建它们.用户不知道内部的具体构建细节.Builder模式是非常类似抽象工厂模式,细微的区别大概只有在反复使用中才能体会到. 为何使用? 是为了将构建复杂对象的过程和它的部件
设计模式之Bridge Bridge定义 : 将抽象和行为划分开来,各自独立,但能动态的结合. 为什么使用? 通常,当一个抽象类或接口有多个具体实现(concrete subclass),这些concrete之间关系可能有以下两种: 1. 这多个具体实现之间恰好是并列的,如前面举例,打桩,有两个concrete class:方形桩和圆形桩;这两个形状上的桩是并列的,没有概念上的重复,那么我们只要使
设计模式之Adapter(适配器) 定义: 将两个不兼容的类纠合在一起使用,属于结构型模式,需要有Adaptee(被适配者)和Adaptor(适配器)两个身份. 为何使用? 我们经常碰到要将两个没有关系的类组合在一起使用,第一解决方案是:修改各自类的接口,但是如果我们没有源代码,或者,我们不愿意为了一个应用而修改各自的接口。 怎么办? 使用Adapter,在这两种接口之间创建一个混合接口(混血儿)
装饰(Decorator) Intent 为对象动态添加功能。 Class Diagram 装饰者(Decorator)和具体组件(ConcreteComponent)都继承自组件(Component),具体组件的方法实现不需要依赖于其它对象,而装饰者组合了一个组件,这样它可以装饰其它装饰者或者具体组件。所谓装饰,就是把这个装饰者套在被装饰者之上,从而动态扩展被装饰者的功能。装饰者的方法有一部分是
组合(Composite) Intent 将对象组合成树形结构来表示“整体/部分”层次关系,允许用户以相同的方式处理单独对象和组合对象。 Class Diagram 组件(Component)类是组合类(Composite)和叶子类(Leaf)的父类,可以把组合类看成是树的中间节点。 组合对象拥有一个或者多个组件对象,因此组合对象的操作可以委托给组件对象去处理,而组件对象可以是另一个组合对象或者叶
9. 策略(Strategy) Intent 定义一系列算法,封装每个算法,并使它们可以互换。 策略模式可以让算法独立于使用它的客户端。 Class Diagram Strategy 接口定义了一个算法族,它们都实现了 behavior() 方法。 Context 是使用到该算法族的类,其中的 doSomething() 方法会调用 behavior(),setStrategy(Strategy)
设计模式是解决问题的方案,学习现有的设计模式可以做到经验复用。拥有设计模式词汇,在沟通时就能用更少的词汇来讨论,并且不需要了解底层细节。 二、创建型 单例.md 简单工厂.md 工厂方法.md 抽象工厂.md 生成器.md 原型模式.md 三、行为型 责任链.md 命令.md 解释器.md 迭代器.md 中介者.md 备忘录.md 观察者.md 状态.md 策略.md 模板方法.md 访问者.md
8. 状态(State) Intent 允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它所属的类。 Class Diagram Implementation 糖果销售机有多种状态,每种状态下销售机有不同的行为,状态可以发生转移,使得销售机的行为也发生改变。 // java public interface State { /** * 投入 25 分钱 */
桥接(Bridge) Intent 将抽象与实现分离开来,使它们可以独立变化。 Class Diagram Abstraction:定义抽象类的接口 Implementor:定义实现类接口 Implementation RemoteControl 表示遥控器,指代 Abstraction。 TV 表示电视,指代 Implementor。 桥接模式将遥控器和电视分离开来,从而可以独立改变遥控器或者电
外观(Facade) Intent 提供了一个统一的接口,用来访问子系统中的一群接口,从而让子系统更容易使用。 Class Diagram Implementation 观看电影需要操作很多电器,使用外观模式实现一键看电影功能。 // java public class SubSystem { public void turnOnTV() { System.out.prin
2. 命令(Command) Intent 将命令封装成对象中,具有以下作用: 使用命令来参数化其它对象 将命令放入队列中进行排队 将命令的操作记录到日志中 支持可撤销的操作 Class Diagram Command:命令 Receiver:命令接收者,也就是命令真正的执行者 Invoker:通过它来调用命令 Client:可以设置命令与命令的接收者 Implementation 设计一个遥控器
代理(Proxy) Intent 控制对其它对象的访问。 Class Diagram 代理有以下四类: 远程代理(Remote Proxy):控制对远程对象(不同地址空间)的访问,它负责将请求及其参数进行编码,并向不同地址空间中的对象发送已经编码的请求。 虚拟代理(Virtual Proxy):根据需要创建开销很大的对象,它可以缓存实体的附加信息,以便延迟对它的访问,例如在网站加载一个很大图片时,
享元(Flyweight) Intent 利用共享的方式来支持大量细粒度的对象,这些对象一部分内部状态是相同的。 Class Diagram Flyweight:享元对象 IntrinsicState:内部状态,享元对象共享内部状态 ExtrinsicState:外部状态,每个享元对象的外部状态不同 Implementation // java public interface Flyweight
单例(Singleton) Intent 确保一个类只有一个实例,并提供该实例的全局访问点。 Class Diagram 使用一个私有构造函数、一个私有静态变量以及一个公有静态函数来实现。 私有构造函数保证了不能通过构造函数来创建对象实例,只能通过公有静态函数返回唯一的私有静态变量。 Implementation Ⅰ 懒汉式-线程不安全 以下实现中,私有静态变量 uniqueInstance 被延
一、性能 二、伸缩性 三、扩展性 四、可用性 五、安全性 参考资料 一、性能 性能指标 1. 响应时间 指某个请求从发出到接收到响应消耗的时间。 在对响应时间进行测试时,通常采用重复请求的方式,然后计算平均响应时间。 2. 吞吐量 指系统在单位时间内可以处理的请求数量,通常使用每秒的请求数来衡量。 3. 并发用户数 指系统能同时处理的并发用户请求数量。 在没有并发存在的系统中,请求被顺序执行,此时