里氏替换原则(Liskov Substitution Principle)LSP的基本概念定义: 所有引用基类的地方必须能透明地使用其子类的对象只要父类能出现的地方子类就可出现,而且替换为子类也不会产生任何错误或异常,使用者可能根本就不需要知道是父类还是子类(封装造成的多态性)规范子类必须完全实现父类的方法
在类中调用其他类时必然要使用父类或者接口,如果子类中不支持父类中的方法,自然就违背了LSP子类要有自己的特性子类是在父类的基础上实现...
在阎宏博士的《JAVA与模式》一书中开头是这样描述状态(State)模式的:状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为模式。状态模式允许一个对象在其内部状态改变的时候改变其行为。这个对象看上去就像是改变了它的类一样。 状态模式的结构 状态模式把对象的行为包装在不同的状态对象里,每一个状态对象都属于一个抽象状态类的一个子类。状态模式是在一个对象状态改变时,使其行为随...
2016-06-07 22:46:16下面简单介绍UML类图:(图是截取的,大家可以用UML工具去画)1、描述类的类图类:Person属性:name age sex访问权限:- 表示私有的private +:表示公共的public #:表示protected方法: getName():String setName(name:String) getAge():int setAge(age:int) getSex():String setSex(sex:String)方法最后跟的是返回类型,没有的话返回类型是void,例如getName()返回类型是String,setName(na...
java设计模式5——适配器模式1、结构型模式介绍1.1、作用从程序的结构上实现松耦合,从而可以扩大整体的类结构,用来解决更大的问题。分类:适配器模式代理模式桥接模式装饰模式组合模式外观模式享元模式2、适配器模式介绍适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。举个...
转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39721563今天开始咱们来谈谈Java设计模式。这里会结合uml图形来讲解,有对uml建模不熟的可以参考我的另一篇博文uml建模。首先,个人觉得模式的设计就是一个将变化的东西和不变(稳定)的东西分离的过程。咱们的应用中可能有很多需要改变的地方,而模式要做的就是把它们“抽取”出来并进行“封装”和“实现”,因此更多的时候咱们是面向接口编程。下面将结合《Head Fir...
singleton模式限制了类的实例化次数只能有一次。singleton模式,该实例不存在的情况下,可以通过一个方法创建一个类来实现创建类的新实例;如果实例已经存在,它会简单的返回对象的引用。Singleton不同于静态类,它可以延迟实例化。 1.对象字面量实现 在javascript中实现单例模式有很多方式,其中最简单的就是对象字面量。var Singleton={name:"vuturn",showName:function(){console.log(this.name);}} 当然也可以扩展该对象...
设计模式之迭代器模式 一、java迭代器介绍1、迭代器接口在jdk中,与迭代器相关的接口有两个:Iterator 与 Iterable。Iterator:迭代器,Iterator及其子类通常是迭代器本身的结构与方法;迭代器是一种模式,它可以使得对于序列类型的数据结构的遍历行为与被遍历的对象分离,即我们无需关心该序列的底层结构是什么样子的。只要拿到这个对象,使用迭代器就可以遍历这个对象的内部。Iterable:可迭代的,那些想用到迭代器功能的其它类,如Ab...
定义: 在事件驱动的环境中,比如浏览器这种持续寻求用户关注的环境中,观察者模式(又名发布者-订阅者 “publisher-subscriber" 模式) 是一种管理人与其任务之间的关系(确切的讲,是其对象及其行为和状态之间的关系)的得力工具。用javascript的 话来说,这种模式的实质 就是你可以程序中某个对象的状态进行观察并且在其发生改变时能够得到通知。 观察者API: var Publisher=function(){
this.subscribers=[];
}...
用途 代理模式 (Proxy) 为其他对象提供一种代理以控制对这个对象的访问。 结构 图-代理模式结构图Subject : 定义了 RealSubject 和 Proxy 的公共接口,这样就在任何使用 RealSubject 的地方都可以使用 Proxy 。abstract class Subject { public abstract void Request();}RealSubject : 定义 Proxy 所代表的真实实体。class RealSubject extends Subject { @Override public void Request() { System.out.pri...
</pre>1 概述:定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤<p></p><p>2 模板模式其实非常简单,仅仅使用了Java的继承机制,它的方法分为两类:基本方法和模板方法</p><p> 基本方法: 基本方法是有子类实现的方法,在父类(模板方法中)被调用</p><p> 模板方法:可以是一个或者几个,一般是一个具体方法,是对子类已经实现的基本方法进行调度...
模型: 反应器模式做法是:汽车是乘客访问的主体(Reactor),乘客上车后,到售票员(acceptor)处登记,之后乘客便可以休息睡觉去了,当到达乘客所要到达的目的地后,售票员将其唤醒即可。 反应器模式与观察者模式在某些方面极为相似:当一个主体发生改变时,所有依属体都得到通知。不过,观察者模式与单个事件源关联,而反应器模式则与多个事件源关联。JDK中模式原型复现: NIO有一个主要的类Selector,这个...
不得不说,本人工作上很少有使用多线程编程技术的地方。由于本人工作上经常使用的是类似SSH等框架搭建MVC架构,所以更加习惯于编写一些优秀程序员所唾弃的样板式的代码。最近看了文海的多线程编程实战指南,瞬间眼前一亮。觉得有很多自己可以学习的,事实上,我已经在最近的项目中使用上了那本书介绍的两相终止模式、串行封闭模式、生产者消费者模式以及线程池等技术,确实在许多方面改进了我们服务端的吞吐量。说到这里本人吐槽一...
这次要介绍一下对象池模式(Object Pool Pattern),这个模式为常见 23 种设计模式之外的设计模式,介绍的初衷主要是在平时的 android 开发中经常会看到,比如 ThreadPool 和 MessagePool 等。 在 java 中,所有对象的内存由虚拟机管理,所以在某些情况下,需要频繁创建一些生命周期很短使用完之后就可以立即销毁,但是数量很大的对象集合,那么此时 GC 的次数必然会增加,这时候为了减小系统 GC 的压力,对象池模式就很适用了。对...
一、概述 提供一种方法来访问聚合对象(容器container),而不用暴露这个对象的内部细节。二、适用场景 1>遍历访问聚合对象中的元素,而无须暴露它的内容表示,将聚合对象的访问和内部数据的存储分离。使得访问聚合对象时无须了解其内部的实现细节。 2>需要为一个聚合对象提供多种遍历实现。三、UML类图四、参与者 1>Iterator(抽象迭代器):它定义了访问和遍历元素的接口,声明了用于遍历数据元素的方法,例如:用于获取第...
看了几次抽象工厂模式,每次查看都需要重新理解一次,可能是涉及的类和接口比较多,所以比较难缕清的关系吧!在笔者看来,我们还是要吸取其思想而不是生搬硬套。来看下类图:大话设计模式-类图看类图已经很乱了,来简单的梳理下。我们只看接口,这样就不难看出实际上是抽象工厂生产抽象产品的过程,而具体实现都是各自的实现类来做。看下具体的demo:工厂层/*** 工厂接口*/publicinterface IFactory {public IUser createUser();pu...