将将来有可能变化的代码和基本不变的代码分开. 这样就尽可能的减少"代码改变"带来的影响,提高了系统的灵活性。这样将来可能变化的代码改变了,将不会影响不变的代码。 所有的设计模式基本都是让可能变化的代码独立出来。 在软件开发中,经过验证的,用于解决在特定环境下,重复出现的,特定问题的解决方案。 设计模式的分类: 1. 创建型模式: ...
装饰模式是一种用于替代继承的技术,使用对象之间的关联关系取代类之间的继承关系。引入装饰类,扩充新功能。 继承也可以增加类的功能。但是使用继承,会使继承体系庞大,代码可能会冗余。package com.Decorator;import java.io.BufferedReader;import java.io.File;import java.io.FileReader;...
提供一个创建对象实例的功能,而无须关心其具体实现。被创建实例的类型可以是接口,抽象类,也可以是具体的类。 面向接口编程静态工厂: 通常把简单工厂类实现成一个工具类,直接使用静态方法就可以了。也就是说简单工厂的方法通常都是静态的。所以也被称为静态工厂。 简单工厂的本质是选择实现。 那么什么时候选用简单工厂? 1. 如果想要完全封装隔离...
外观模式: 为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。Facade:定义子系统的多个模块对外的高层接口,通常需要调用内部多个模块,从而把客户的请求代理给适当的子系统对象。模块:接受Facade对象的委派,真正实现功能,各个模块之间可能有交互。 注意,Facade对象知道各个模块,但是各个模块...
将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 适配器模式的功能: 适配器模式的主要功能是进行转换匹配,目的是复用已有的功能,而不是来实现新的接口。 适配器里面也可以实现功能,称这种适配器为智能适配器。适配器的实现方式其实是依靠对象组合的方式。 适配器的常...
单一职责原则 对类来说,即一个类应该只负责一项职责。如A类负责两个不同的职责:职责1,职责2。当职责1需求变更而改变A时,可能造成职责2执行错误。所以需要将类A的粒度分解为A1,A2。 ①降低类的复杂度,一个类只负责一项职责。 ②提高类的可读性,可维护性。 ③降低变更引起的风险。 ④通常情况下,我们应当遵守单一职责原则,只有逻辑足够简单,才可以在代码级...
组合模式: 又叫部分整体模式, 它创建了对象组的树形结构,将对象组合成树状结构以表示"整体-部分"的层次关系。 JDK中的HashMap就使用了组合模式public abstract class OrganizationComponent { private String name; // 名字 private String desc; // 说明 public...
外观模式(Facade)也叫过程模式, 外观模式为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 外观模式通过定义一个一致的接口,用以屏蔽内部子系统的细节,使得调用端只需跟这个接口发生调用,而无需关心这个子系统的内部细节。 外观类(Facade): 为调用端提供统一的调用接口,外观类知道哪些子系统负责处理请求,从...
模板方法模式: 在一个抽象类公开定义了执行它的方法的模板,它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。 属于行为型模式。 spring ioc容器初始化时运用到模板方法模式。// 抽象类,表示豆浆public abstract class SoyMilk { // 模板方法可以做成final,不让子类覆盖 final void make(){...
命令模式(Command Pattern): 在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接受者是谁,也不知道请求的操作是哪个。 我们只需在程序运行时指定具体的请求接受者即可,此时,可以使用命令模式来进行设计。 命令模式在spring框架的JdbcTemplate中有应用。 通俗易懂的理解, 将军发布命令,士兵去执行。其中有几个角色,将军(命令...
访问者模式(Visitor Pattern): 封装一些作用于某种数据结构的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。 主要将数据结构与数据操作分离,解决数据结构和操作耦合性问题。 访问者模式的基本工作原理: 在被访问的类里面加一个对外提供接待访问者的接口。public abstract class Action { publi...
1.开闭原则 面向对象的可复用设计的第一块基石就是"开-闭"原则(open-closed principle) 一个软件实体应当对扩展开放,对修改关闭. 抽象化是实现开闭原则的关键,感觉面向接口编程是很好的遵循了这种原则. 2.里氏代换原则(Liskov Substitution Principle LSP) 任何基类可以出现的地方,子类一定可以出现....
在java语言里, 类分为两种:一种是抽象类,一种是具体类。具体类可以实例化,抽象类不可以实例化。 一个抽象类仅提供一个类型的部分实现。 一个抽象类不能被实例化,那么一个抽象类被设计出来,一定是被用来继承的。 那么同时,具体类不是用来继承的。...
java中的接口相当于生活中的插座。 电器(比如,电视,微波炉,洗衣机)都可以插在同一个插座上。这些电器就是可插入构件(pluggable component)。 可插入构建的关键在于存在一个公用的接口,以及每个构件都实现了这个接口。 因此接口是实现构件的可插入性的关键。 接口就像一个角色,它包装与该角色相关的操作和属性,而实现这个接口的类便是扮演这个角色的演员。一个角色可以由不...
单例模式: 保证一个类仅有一个实例,并提供一个访问它的全局访问点。 采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法(静态方法)单例模式的八种方式 1).饿汉式(静态常量) 2).饿汉式(静态代码块) 3).懒汉式(线程不安全) 4).懒汉式(线程安全,同步方法) ...
飞机抽象类package com.China.factory.simplefactory.plane;public abstract class Plane { protected String name; public String getName() { return name; } public void setName(String name) { this...
1). 抽象工厂模式:定义了一个interface用于创建相关或有依赖关系的对象簇,而无需指明具体的类.2). 抽象工厂模式可以将简单工厂模式和工厂方法模式进行整合.3). 从设计层面看,抽象工厂模式就是对简单工厂模式的改进(或者称为进一步的抽象).4). 将工厂抽象成两层,AbsFactory(抽象工厂)和具有实现的工厂子类,程序员可以根据创建对象类型使用对应的工厂子类. 这样...
懒汉式(线程不安全)1). 起到了懒加载的效果,但是只能在单线程下使用。2). 如果在多线程下,一个线程进入了if(null == instance)判断语句块,还未来得及往下执行,另一个线程也通过了这个判断语句,这时便会产生多个实例,所以在多线程环境下不可使用这种方式。3). 结论,在实际开发中,不要使用如下这种方式。public class SingletonTest03 ...
迪米特法则的核心是降低类之间的耦合 , 最少知道原则import java.util.ArrayList;import java.util.List;public class Demeter1 { public static void main(String[] args){ SchoolManager schoolManager = new SchoolManager(); ...
1).饿汉式(静态常量) 步骤如下: ①构造器私有化 ②类的内部创建对象 ③向外部暴露一个静态的公共方法 优点: 这种写法比较简单,就是在类加载的时候就完成实例化,避免了线程同步问题。public class SingletonTest01 { public static void main(String[] args...
双重检查double-check概念是多线程开发中常使用的,如下代码所示,我们进行了两次if(null==instance)检查,这样就可以保证线程安全了。 实例化代码只用执行一次,后面再次访问时,判断if(null==instance),直接return实例化对象,也避免了反复进行方法同步。public class SingletonTest06 { public...
优缺点说明: 1). 这种方式采用了类加载的机制来保证初始化实例时只有一个线程。 2). 静态内部类方式在Singleton1类被加载时并不会立即实例化,而是在需要实例化时,调用getSingleton1()方法,才会装载SingletonInstance类,从而完成Singleton1的实例化。 3). 类的静态属性只会在第一次加载类的时候初始化,所以在这里,jvm帮助我们...
优缺点: 1). 借助JDK1.5中添加的枚举来实现单例模式,不仅能避免多线程同步问题,而且还能防止反序列化重新创建新的对象。 2). 这种方式是Effective Java作者Josh Bloch提倡的方式。 3). 结论: 推荐使用package com.China.singleton.example8;public class SingletonTest08 ...
在java jdk中, java.lang.Runtime就是经典的单例模式。 以下截取Runtime部分代码package java.lang;import java.io.*;import java.util.StringTokenizer;/** * Every Java application has a single instance of class * &...
工厂方法模式 定义一个创建对象的抽象方法,由子类决定要实例化的类,工厂方法模式将对象的实例化推迟到子类。代码UML类图如下:飞机类package com.China.factory.factorymethod.plane;public abstract class Plane { protected String name; public St...
java中的Object类是所有类的根类。Object类提供了一个clone()方法,该方法可以将一个java对象复制一份,但是需要实现clone的java类必须要实现一个接口Cloneable,该接口表示该类能够复制且具有复制的能力。原型模式基本介绍 1). 原型模式是指: 用原型实例指定创建对象的种类,并且通过拷贝这些原型,创建新的对象。 2)....
建造者模式(builder pattern): 1. 又叫生成器模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。 2. 建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。 类图...
适配器模式主要分为三类: 类适配器模式, 对象适配器模式,接口适配器模式。 SpringMVC中的HandlerAdapter就是用了适配器模式。适配器模式工作原理: 1. 将一个类的接口转换成另一种接口,让原本接口不兼容的类可以兼容。 2. 从用户角度看不到被适配者,是解耦的。 3. 用户调用适配器转换出来的目标接口方法,适配器再调用被适配者的相关接口方法。...
jdk中的比较器Comparator就使用到了策略模式
桥接模式: 将实现与抽象放在两个不同的类层次中,使两个层次可以独立改变。public abstract class Phone { private Brand brand; public Phone(Brand brand){ this.brand = brand; } public void open() { this.brand.open(); }...
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号