昨天我们介绍了设计模式的七大原则,今天我们介绍一下设计模式中的三大分类具体23种设计模式。
三大设计模式分别是:创建型、结构型、行为型三种
思维导图如下所示:
关注公众号:java冢狐,回复【设计模式】获得高清原图。感谢您的关注。
内存中只会创建且仅创建一次对象的设计模式。
public class Singlenton{
// 只实例化一次
private final static Singleton INSTANCE = new Singleton();
// 私有构造方法,防止被实例化
private Singleton(){}
public static Singleton getInstance(){
return INSTANCE;
}
}
public class Singleton{
// 使用volatile修饰,让变量每次使用的时候从主存主取而不是从各个线程的“工作内存”中
private static volatile Singleton instance;
// 私有构造方法,防止被实例化
private Singleton(){}
public static Singleton getInstance(){
if(instance == null){
synchronized(Singleton.class){
if(instance == null){
instance = new Singleton;
}
}
}
return instance;
}
}
public clsaa Singleton{
// 私有构造方法,防止被实例化
private Singleton(){}
// 使用一个内部类来维护单例,只有在改类被加载的时候,才会实例化对象
private static class SingletonInstance{
private static final Singleton INSTANCE = new Singleton();
}
// 获取实例
public static Singleton getInstance(){
return SingletonInstance.INSTANCE;
}
}
public enum Singleton{
INSTANCE;
public Singleton getInstance(){
return INSTANCE;
}
}
创建一个统一的工厂类,根据传入的参数不同创建不同的对象,需要在一堆产品中选在其中一个产品。
工厂模式不是用一个统一的工厂类来管理所有的对象,而是每一个对象都有不同的工厂相对应
抽象工厂模式是对工厂模式的进一步优化,工厂类不单单只能创建一个对象,而是创建一组对象
简单工厂模式是外部传值进去,以获取不同对象
抽象工厂模式直接通过方法获取对象,不需要传值
将一个复杂对象的构建与其表示分离,使同样的构建过程可以创建不同的表示。
就是构造的时候只传必须的参数,其他参数通过set方法可选传入。
使用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式是一种对象创建型模式。
目的在于适配接口
public class Adaptee{
public void adapteeRequest(){
System,out,println("被适配者的方法");
}
}
public interface target{
void request();
}
装饰模式允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为一个现有的类的一个包装。
动态的添加功能。
在代理模式中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式;在代理模式中,我们创建具有现有对象的对象,以便向外提供功能接口
主要分为静态代理和动态代理
外观模式隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,以隐藏系统的复杂性
这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用
外观模式就是将他们的关系放在一个Facade类中,降低了类与类之间的耦合度。
桥接是用于把抽象化与实现化解耦,使得二者可以独立变化。通过提供抽象化和实现化之前的桥接结构,来实现二者的解耦。
这种模式涉及到一个作为桥接的接口,使得是立体的功能独立于接口实现类。这两种类型的类可以被结构化改变而互不影响。
是用于把一组相似的对象当做一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式。它创建了对象组合树形结构
创建了一个包含自己对象组的类。该类提供了修改相同对象组的方式
主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式
尝试重用现有的同类对象,如果未找到匹配的对象,则创建新的对象。
提供了评估语言的语法或表达式的方式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。这种模式被用在SQL解析、符号处理引擎等。
当对象间存在一对多关系时,则使用观察者模式。比如当一个对象被修改时,则会自动通知它依赖的对象
中介者模式是用来降低多个对象和类之间的通信复杂度。这种模式提供了一个中介类,该类通常处理不同类之间的通信,支持松耦合,使代码易于维护
保存一个对象的某个状态,以便在适当的时候恢复对象。
命令模式是一种数据驱动的设计模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适对象,并把该命令传给相应的对象,该对象执行命令。
为请求创建了一个接受者对象的链。这种模式给予请求的类型,对请求的发送者和接受者进行解耦。
我们使用一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。这种类型的设计模式属于行为型模式。根据模式、元素对象已接收访问者对象,这样访问者对象就可以处理元素对象上的操作。
是java和.net编程环境中常用到的设计模式。这种模式孕育顺序访问集合对象的元素,不需要知道集合对象底层表示。
一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。
——我是冢狐,和你一样热爱编程。