设计模式
185的阿平
集中起来的力量可以击穿顽石
展开
-
设计模式:观察者模式
今收到要对接外部系统需求,因为该产品属于资讯产品。内容是由外部系统编辑,编辑完成后就要通过接口方式通知我方系统,我方系统根据调用接口的参数来确定更新哪些内容。这看上去就属于一个发布订阅模式,可采用MQ去实现。可由于某些因素无法使用MQ。此时的场景就可以用观察者模式解决。举个更具体的例子,A类资讯 分A1,A2,A3B类资讯 分B1,B2,B3 当A类资讯在外部系统编辑后,我就知道要去更新A1,A2,A3的内容。此时A类B类资讯可抽象成一个Sender接口,表示被观察者(发布者)。A1,A2,A3也可抽.原创 2022-01-16 16:50:35 · 232 阅读 · 0 评论 -
设计模式:模板模式
模板模式 就是将通用方法抽象到父类作为模板,将公共的结构化逻辑在父类中完成。子类继承父类其通用方法实现不同业务逻辑。一般来说通用方法定义为抽象方法,公共逻辑方法使用final修饰不让子类重写。如人的一天按早中晚三餐吃饭,每个人每顿吃的不一样。但顺序肯定是早中晚,这样就可以用模板方式实现。人生活接口public abstract class PersonLife { abstract void monEat(); abstract void lunchEat(); abs原创 2021-12-21 10:55:18 · 93 阅读 · 0 评论 -
设计模式:策略模式
策略模式很大方面是为了解决代码中多层嵌套if else的问题。当某一类业务有共同特性时,并且分为多个场景要走不同的逻辑时,比如if(我是人) deal(我要吃饭) if(我是牛) deal(我要吃草)if(我是大熊猫) deal(我要吃竹子) 这样如此多的业务的话 会变成if() else if() else if() else{} 如果中间if中再带if判断条件,整个代码看起来就晕掉。这时候可以使用策略模式美化代码。定义一个共同接口public interface Person { v.原创 2021-11-30 21:07:57 · 496 阅读 · 0 评论 -
设计模式:代理模式
代理模式分为静态代理和动态代理两种,静态代理就是一个代理类将原来真实业务类的方法全部实现了一遍,并持有原来业务类的引用。对外提供API供调用。这样外部调用都是调用代理类。 动态代理例举JDK动态代理,将方法在运行过程中动态传入,并赋予源对象的引用。两者的区别就是动态代理会更简洁,能动态生成代理。不需要编译前先定义好代码。看实例:静态代理公共接口public interface Life { void eat(); void sleep();}真实业务类public原创 2021-11-29 21:06:45 · 140 阅读 · 0 评论 -
设计模式:装饰器模式
装饰器模式4点:(1)装饰对象和真实对象有相同的接口。这样客户端对象就可以以和真实对象相同的方式和装饰对象交互。(2)装饰对象包含一个真实对象的引用。这样做的目的其实对外来说是调用装饰器的方法,其实调用的是具体真实对象的方法。(3)装饰对象接受所有的来自客户端的请求,它把这些请求转发给真实的对象。(4)装饰对象可以在转发这些请求以前或以后增加一些附加功能。这样就确保了在运行时,不用修改给定对象的结构就可以在外部增加附加的功能。举例子:现在建成了一栋楼房,但是啥都没有。这时候就需要进行装修原创 2021-11-15 20:51:25 · 263 阅读 · 0 评论 -
设计模式:过滤器模式
过滤器模式思想就是不同的业务规则对同一个数据进行过滤后得到最终数据。一般适用于对象属性过滤。比如现在做人信息调查,有根据姓名和年龄去过滤信息。那这里就是两个过滤器AgeFilter,Nlter。面向的一个数据就是人的信息Person。但在jdk1.8通过steam新特性可快速实现过滤器模式。只需要理解下过滤器的思想即可。Person类public class Person { private Integer id; private String name; private原创 2021-11-05 14:56:54 · 128 阅读 · 0 评论 -
设计模式:桥接模式
桥接模式是类的功能层次结构和实现层次结构相分离,使二者能够独立地变化,并在两者之间搭建桥梁,实现桥接。但业务上来说一定是有关联性的。比如人的一天有工作和饮食,肯定就是先吃完饭再工作。吃饭里面又有很多种吃法,吃炸串,吃米粉。工作也有很多种,写笔记,敲代码。那么工作和饮食就可以分开作为公共的抽象类或者接口。如果这两个东西要交叉用,就需要一座桥连接起来。生活的接口:public interface PersonLife { void drink(); void eat();}...原创 2021-11-02 17:21:59 · 77 阅读 · 0 评论 -
设计模式:适配器模式
适配器模式本质就是通过一个适配器类集成两个或多个不同类的方法,达到通用目的。如A类已经有一个sendSms()方法发送短信,B类也有个sendEmail方法发送邮件。B类实现了T接口,所以T接口有sendEmail方法。然后现在想通过T接口new出来的实例化对象去调用A类的sendSms方法。这时候就可以用到适配器类。邮箱类public class Email { public void send(){ System.out.println("这是邮箱发送服务");原创 2021-11-01 17:28:20 · 119 阅读 · 0 评论 -
设计模式:原型模式
所谓原型模式就是当一个对象在运行时创建后,所有后续的对象都在此对象上通过clone来实现,而不去自己new,set属性的过程。可以简化复杂对象的创建过程。组成的话基本就三个大类:1.原型的抽象类 2.原型的具体实现类 3.具体原型的创建类原型的抽象类:这个定义了原型的大部分属性及方法,具体类只需要继承该类。这个类需实现Cloneable接口,这样才能调到object.clone()public abstract class PrototypeProduct implements Cloneab原创 2021-10-29 19:25:15 · 70 阅读 · 0 评论 -
设计模式:单例模式(反射破坏,枚举不能被破坏的原因)
除了枚举单例,其余都能被反射破坏。双重检查+懒汉式+私有构造判断(这已经是比较安全的写法,网上说不能破坏):package com.yuanping.sjms_demo.singleton;/** * 单例模式标准,私有静态成员变量,私有构造方法,公共静态获取实例的方法 */public class DoubleCheck { private static volatile DoubleCheck doubleCheck = null; //volitile防止指令重排序原创 2021-10-21 17:41:51 · 931 阅读 · 0 评论 -
设计模式:简单工厂,工厂方法,抽象工厂区别图解
简单工厂:简单工厂(也叫静态工厂) 一个具体工厂类里面通过一个静态方法去获取某个抽象产品的子产品。比如你在自助贩卖机去买矿泉水:有怡宝,娃哈哈,百岁山。他们的价格为2块,1块,3块。这时候你就需要确定你想喝哪款,需要传递一个水标识的信息给贩卖机,贩卖机就返一个对应的支付码,支付完成后送对应的水。代码://工厂类:利用反射是为了减少if/elsepublic class WaterFactory { public static Water getInstants(Strin..原创 2021-10-20 17:14:24 · 198 阅读 · 1 评论