跳至主要內容
[设计模式]-结构型-观察者模式

概念说明

观察者模式

​ 当一个⾏为发⽣时传递信息给另外⼀个⽤户接收做出相应的处理,两者之间没有直接的耦合关联。

​ 除了⽣活中的场景外,在我们编程开发中也会常⽤到⼀些观察者的模式或者组件,例如MQ服务,虽然MQ服务是有⼀个通知中⼼并不是每⼀个类服务进⾏通知,但整体上也可以算作是观察者模式的思路设计。再⽐如类似事件监听总线,让主线服务与其他辅线业务服务分离,为了使系统降低耦合和增强扩展性,也会使⽤观察者模式进⾏处理。(例如Java Swing、GUI的事件监听,也可以理解为一个观察者模式)


holic-x...大约 8 分钟设计模式设计模式
[设计模式]-结构型-门面模式

概念说明

场景案例分析

门面模式概念

​ 目的:门面模式的主要目的是提供一个 统一的接口,用于访问一组子系统的功能。

​ 使用门面模式可以简化接口,降低调用方的使用和理解成本;它封装了子系统的复杂性,使客户端可以更轻松地与子系统交互,而不需要了解子系统内部的工作细节,降低了客户端和子系统的耦合度。

​ 例如在search-platform项目中,一开始构想的是通过不同方式搜索,每个搜索触发都去请求一次接口,但是这对前后端数据交互、包括前后端开发调试来说成本都相对较高,于是调整为将所有的搜索入口统一为一个入口,后端controller对外统一提供一个接口供数据交互,根据前端指定的不同searchType搜索类型进行校验,进而匹配相应的搜索结果。这种模式相当于将前端的一些工作量丢到后台处理,但是在实际交互上能够很大程度改善系统性能,常见使用门面模式的还有slfj4框架


holic-x...大约 3 分钟设计模式设计模式
[设计模式]-结构型-装饰器模式

基本概念

装饰器模式的应用:IO流构建

// 简单案例分析
class Person
{
	public void eat()
	{
		System.out.println("吃饭...");
	}
}
class newPerson extends Person
{
	public void eat()
	{
		System.out.println("饭前开胃酒...");
		super.eat();
		System.out.println("饭后甜点...");
		System.out.println("饭后休闲...");
	}
}
class newWrapperPerson
{
	/**
	 * 装饰者模式:
	 * 1.定义一个私有的装饰对象
	 * 2.提供一个带参数的构造函数初始化该对象
	 * 3.根据需求在原有功能的基础上扩展相应的功能
	 */
	private Person p;
	public newWrapperPerson(Person p)
	{
		this.p = p;
	}
	public void eat()
	{
		System.out.println("开始吃饭、聊天...喝喝小酒...");
		p.eat();
		System.out.println("饭后甜点...");
		System.out.println("饭后休闲...");
		System.out.println("吃饭结束...");
	}
}


public class WrapperDemo {
	/**
	 * 装饰者模式是为了解决给类的功能增强而出现的
	 *  --对Writer根据不同的业务进行划分
	 *  Writer
	 *  	 |------TextWriter
	 *  	 |------MediaWriter
	 *  	 |------ImageWriter
	 *  
	 *  ---随着业务功能的提升   这时需要对Writer再次改写 要求提升性能    --利用缓冲
	 *  Writer
	 *  	 |------TextWriter
	 *  				|----BufferedTextWriter
	 *  	 |------MediaWriter
	 *  				|---BufferedMediaWriter
	 *  	 |------ImageWriter
	 *  				|---BufferedImageWriter
	 *  
	 *  ---业务进一步提升需求  这时要求 对Writer 提高容错性和完整性   --- 利用差异传输...
	 *  Writer
	 *  	 |------TextWriter
	 *  				|----BufferedTextWriter
	 *  						|----InfoExceptionBufferedTextWrite
	 *  	 |------MediaWriter
	 *  				|---BufferedMediaWriter
	 *  						|---InfoExceptionBufferedMediaWriter
	 *  	 |------ImageWriter
	 *  				|---BufferedImageWriter
	 *  						|----InfoExceptionBufferedImageWriter
	 *  
	 *  可以利用装饰者模式 解决继承来实现功能增强的这种行为
	 *   Writer
	 *   	  |---TextWriter
	 *   	  |---MediaWriter
	 *   	  |---ImageWriter
	 *        |---BufferedWriter
	 *        |--InfoExceptionWriter
	 *        
	 *  class BufferedWriter extends Writer{
	 *    private   TextWriter textWriter;
	 *    public  BufferedWriter( TextWriter textWriter){
	 *      this.textWriter=textWriter;
	 *    }
	 *  }
	 *  
	 *  使用装饰者模式的 特点: 
	 *  1.装饰者中的构造函数 必须接受被装饰的类
	 *  2.装饰的类和被装饰的类应该属于同一个体系
	 */
	public static void main(String[] args) {
		newWrapperPerson nwp = new newWrapperPerson(new Person());
		nwp.eat();
	}
}


holic-x...大约 2 分钟设计模式设计模式
设计模式-模板设计模式

3.4模板设计模式

  • 设计模式

    设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。 使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。

  • 模板设计模式

    把抽象类整体就可以看做成一个模板,模板中不能决定的东西定义成抽象方法 让使用模板的类(继承抽象类的类)去重写抽象方法实现需求

  • 模板设计模式的优势

    模板已经定义了通用结构,使用者只需要关心自己需要实现的功能即可

  • 示例代码

    模板类

    /*
        作文模板类
     */
    public abstract class CompositionTemplate {
    
        public final void write(){
            System.out.println("<<我的爸爸>>");
    
            body();
    
            System.out.println("啊~ 这就是我的爸爸");
    
        }
    
        public abstract void body();
    }
    

    实现类A

    public class Tom extends CompositionTemplate {
    
        @Override
        public void body() {
            System.out.println("那是一个秋天, 风儿那么缠绵,记忆中, " +
                    "那天爸爸骑车接我放学回家,我的脚卡在了自行车链当中, 爸爸蹬不动,他就站起来蹬...");
        }
    }
    

    实现类B

    public class Tony extends CompositionTemplate {
        @Override
        public void body() {
    
        }
    
        /*public void write(){
    
        }*/
    }
    

    测试类

    public class Test {
        public static void main(String[] args) {
            Tom t = new Tom();
            t.write();
        }
    }
    

holic-x...大约 1 分钟设计模式设计模式
[设计模式]-结构型-适配器模式

基本概念

概念说明

​ 适配器模式的主要作⽤就是把原本不兼容的接⼝,通过适配修改做到统⼀。使得⽤户⽅便使⽤,就像我们提到的万能充、数据线、MAC笔记本的转换头、出国旅游买个插座等等,他们都是为了适配各种不同的口做的兼容

​ 在业务开发中我们会经常的需要做不同接⼝的兼容,尤其是中台服务,中台需要把各个业务线的各种类型服务做统⼀包装,再对外提供接⼝进⾏使⽤。⽽这在我们平常的开发中也是⾮常常⻅的。

场景案例分析

​ 类似数据源接入场景

场景分析


holic-x...大约 5 分钟设计模式设计模式
[设计模式]-创建型-Builder模式

基本概念

​ 建造者模式:将⼀个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示

​ 通过将多个简单对象一步步组装构建出一个复杂对象的过程。适用于一些基本物料不变,但其组合经常变化的场景

​ 场景举例:建造者模式初始化游戏元素(根据用户的网络资源等情况构建不同清晰度的游戏场景和不同模式下的游戏元素)

​ Builder设计模式满⾜了单⼀职责原则以及可复⽤的技术、建造者独⽴、易扩展、便于控制细节⻛险。但同时当出现特别多的物料以及很多的组合后,类的不断扩展也会造成难以维护的问题。但这种设计结构模型可以把重复的内容抽象到数据库中,按照需要配置。这样就可以减少代码中⼤量的重复。


holic-x...大约 3 分钟设计模式设计模式
[设计模式]-创建型-工厂模式

1.学习思路

工厂模式的基本概念、应用场景

工厂模式的实现

基于工厂模式案例分析

2.基本概念

​ 工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来, 达到提高灵活性的目的

工厂模式在《Java 与模式》中分为三类:

​ 简单工厂模式(Simple Factory)

​ 工厂方法模式(Factory Method)

​ 抽象工厂模式(Abstract Factory)


holic-x...大约 8 分钟设计模式设计模式
[设计模式]-创建型-单例模式

[TOC]

1.学习思路

单例模式学习思路

单例模式的基本概念、应用场景

单例模式的实现

单例模式邪恶论

基于单例模式案例分析

单例模式构建图示

​ 从懒加载、线程安全等方面结合场景应用进行分析,选择较为合适的方式构建单例

image-20220201231734900


holic-x...大约 10 分钟设计模式设计模式
[设计模式]-概要

​ 设计模式学习笔记,基于优秀的书籍和开发探索整理的个人学习笔记,在后续的学习中相应迭代案例分析和场景应用

参考推荐书籍:

图解设计模式

重学Java模式:项目场景应用案例,便于进一步了解设计模式

REFACTORING.GURU - https://refactoringguru.cn - 图⽂设计模式资料

菜鸟设计模式-RUNOOB.COM

[TOC]

1.设计模式概念

基本概念

​ 设计模式是设计过程中可以反复使用的、可以解决特定问题的设计方法。通过了解一些设计模式的概念,去构建良好的代码结构,提升全局把控能力


holic-x...大约 6 分钟设计模式设计模式