![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Design Pattern
Bwz_Learning
Change the world by program.
展开
-
单例模式(SingleTon)
在Java设计模式中,单例模式相对来说算是比较简单的一种构建模式。适用的场景在于:对于定义的一个类,在整个应用程序执行期间只有唯一的一个实例对象。如Android中常见的Application对象。 通过单例模式,自行实例化并向这个系统提供这个单一实例的访问方法。根据此单一实例产生的时机不同(当然,都是指第一次,也是唯一一次产生此单一实例时),可以将其分为懒汉式、饿汉式和登记式转载 2016-12-06 11:12:14 · 224 阅读 · 0 评论 -
观察者模式(Observer)
观察者模式中通常有两个基本的概念主题:观察者和被观察者。当被观察者状态发生改变时,需要通知相应的观察者,当然,每个被观察者所对应的观察者可能不知一个,他们之间是1:n的关系。用专业一点的术语对观察者模式的描述为:当一个对象变化时,其它依赖该对象的对象都会收到通知,并且随着变化。观察者模式的一般实现方式如下:1.定义观察者所具有的共同的接口:1 interface Obser转载 2016-12-06 14:08:26 · 292 阅读 · 0 评论 -
模板方法模式(Template Method)
模板方法模式需要开发抽象类和具体子类之间的协作。抽象类负责给出一个算法的轮廓和骨架,子类则负责给出这个算法的各个逻辑步骤。代表这些具体逻辑步骤的方法称做基本方法(primitive method);而将这些基本方法汇总起来的方法叫做模板方法(template method)。子类重写抽象类中的抽象方法,通过调用抽象类中的模板方法中的抽象方法,实现对子类基本方法的调用。直接来看一个例子:转载 2016-12-06 14:06:16 · 293 阅读 · 0 评论 -
策略模式(Strategy)
前面的博文中分别介绍了Java设计模式中的创建型模式和结构型模式。从本文开始,将分别介绍设计模式中的第三大类,行为型模式。首先我们了解下分为此三大类的依据。创建型模式:主要侧重于对象的创建过程;结构型模式:主要侧重于处理类或对象的组合;行为型模式:主要侧重于类或对象之间的交互以及职责分配。首先了解下策略模式的概念:定义了多个算法,并将它们封装起来(一般的是每个算法封转载 2016-12-06 14:04:54 · 240 阅读 · 0 评论 -
享元模式(Flyweight)
我们都知道,Java中的String类具有如下特性:String是一个不可变类,当直通过用字符串方式使用String对象时,Jvm实际上在内存中只存有一份,且存在字符串常量池中。当对字符串直接进行修改时(如直接联接另一个字符串常量),Jvm会首先去字符串常量池中查找是否已经存在此字符串,不存在则创建一份放在池中,存在则直接使用。诸如此类:当系统中可能具有多个相同的对象时,对于具有相同的内容的对象可转载 2016-12-06 14:02:09 · 266 阅读 · 0 评论 -
组合模式(Composite)
在探讨Java组合模式之前,先要明白几个概念的区别:继承、组合和聚合。继承是is-a的关系。组合和聚合有点像,有些书上没有作区分,都称之为has-a,有些书上对其进行了较为严格区分,组合是contains-a关系,聚合是has-a关系。组合方式中被组合的对象生命周期不能超过整体,一般写代码时是直接在整体类的构造方法中创建被组合类的对象。如人和手之间的关系,人都没了,还何来手?转载 2016-12-06 13:46:44 · 340 阅读 · 0 评论 -
桥接模式(Bridge)
在实际类设计过程中,有时会遇到此类情况:由于实际的需要,某个类具有两个或两个以上的维度变化,如果利用继承将每种可能的变化情况都定义成一个类,一是会导致类膨胀的问题,二是以后不太好维护和并且违背类的设计原则。那么面对这种情况,类改如何设计呢?这就是本文所要讲到的桥接模式。简单的讲,桥接模式是指:将抽象和行为划分开来,从而将各个可能变化的维度分离开来,各自独立成一个类,但是能够动态的组合。转载 2016-12-06 13:42:40 · 305 阅读 · 0 评论 -
代理模式(Proxy)
时代在发展,我们发现,现在不少明星都开始进行微访谈之类的,有越来越多的参与捐赠等。新的一天开始了,首先看下新的一天的日程安排:1 interface Schedule{2 3 public void weiTalk();4 5 public void donation();6 7 }Schedule接口定义了今天的形成转载 2016-12-06 13:34:40 · 322 阅读 · 0 评论 -
外观模式(Facade)
张三自从毕业后开始做软件开发,做着做着发现不爽了,钱赚不了太多,头发也白了。于是拿着一点小资本,想着做点小生意。瞅着眼前的餐饮行业还不错,于是打算开一家餐馆。开参观可不是一件容易的事,仅仅行政类的审批流程就不少。至少包括办理卫生许可证,办理税务登记,办理工商登记等。我们先来看一下行政审批接口:1 interface Executive{2 3 public vo转载 2016-12-06 13:32:30 · 240 阅读 · 0 评论 -
装饰器模式(Decorator)
在面向对象设计过程中,经常会遇到需要对现有的类的功能进行扩展,通常我们可以采用继承的方式。例如老罗最近在做手机,一开始需要定义手机所应具有的功能:1 interface Phone{2 3 public void tel();4 5 public void sms();6 7 }在此,为简单起见,只是定义了接打电话和收转载 2016-12-06 11:50:47 · 367 阅读 · 0 评论 -
适配器模式(Adapter)
网上看到不少关于适配器模式的讲解,其中对于适配器模式解释的过于专业,一时不是特别理解适配器模式到底是用来干嘛的,具体的适用场景在哪,其最精髓的地方到底在哪。本文结合自己的理解,阐述下对适配器模式的看法。假设系统存在一个现有的类UserInfo: 1 class UserInfo { 2 3 private Map userBaseInfo; 4 5转载 2016-12-06 11:47:58 · 337 阅读 · 0 评论 -
原型模式(Prototype)
首先对原型模式进行一个简单概念说明:通过一个已经存在的对象,复制出更多的具有与此对象具有相同类型的新的对象。在理解Java原型模式之前,首先需要理解Java中的一个概念:复制/克隆。在博文《Java总结篇系列:java.lang.Object》一文中,对Java中的clone()方法进行了一定的阐述。同时,我们需要知道,Java中的对象复制/克隆分为浅复制和深复制。一、浅复转载 2016-12-06 11:42:38 · 429 阅读 · 0 评论 -
抽象工厂模式(Abstract Factory)
在上一篇的工厂方法模式中,通过一个公用的类对其他具有相同特性(实现相同接口或继承同一父类)的类的对象进行创建。随之带来的问题在于:当新定义了一个具有相同特性的类时,需要修改工厂类。这与设计模式中的开闭原则有些违背。因此,通过抽象工厂模式:创建多个工厂类而不是一个工厂类,一旦需要创建新的类对象,只需增加新的工厂类就可以了,不需要修改之前的代码。如此可以较好解决工厂方法模式中的问题。常见经典写转载 2016-12-06 11:29:07 · 245 阅读 · 0 评论 -
工厂方法模式(Factory Method)
工厂方法模式适合于对实现了同一接口或继承了同一父类的一些类进行实例的创建。一般是通过定义一个工厂类,并在其方法中实现对具有上述特点的类对象的创建。根据具体产生类对象的方法定义形式,又可以将其分为普通工厂方法模式、多个工厂方法模式和静态工厂方法模式。一、普通工厂方法模式:常见的经典写法如下(以发送邮件和短信为例):1.定义邮件类和短信类具有的共同接口:1 in转载 2016-12-06 11:27:06 · 351 阅读 · 0 评论 -
建造者模式(Builder)
关于建造者模式网上有很多文章,也有些不同的理解。在此结合网上其他文章对建造者模式进行总结。总体说来,建造者模式适合于一个具有较多的零件(属性)的产品(对象)的创建过程。根据产品创建过程中零件的构造是否具有一致的先后顺序,可以将其分为如下两种形式。一、通过Client、Director、Builder和Product形成的建造者模式Builder负责Product类对象的具体转载 2016-12-06 11:21:51 · 348 阅读 · 0 评论 -
命令模式(Command)
在程序设计中,经常会遇到一个对象需要调用另外一个对象的某个方法以达到某种目的,在此场景中,存在两个角色:请求发出者和请求接收者。发出者发出请求,接收者接收请求并进行相应处理。有时候,当需要对请求发出者和接收者进行解耦,即发出者中不能含有接收者的引用,如请求需要进行排队操作,或可能需要对请求进行取消操作等,在此类场景中,请求发出者此时若还是直接操作接收者,将无法满足此类需求。此时,我们可以使用命令模转载 2016-12-06 14:10:59 · 338 阅读 · 0 评论