设计模式
设计模式
学nm个锤子
Qtmd
展开
-
观察者模式
观察者模式(Observer Pattern)定义了对象之间的一对多依赖,让多个观察者对象同时监听一个主体对象,当主体对象发生变化时,它的所有依赖者(观察者)都会收到通知并更新,属于行为型模式。观察者模式有时也叫做发布订阅模式。观察者模式主要用于在关联行为之间建立一套触发机制的场景。原生jdk的观察者模式public class PublishAdapter extends Observable { public void publishMessage(String message) {原创 2021-02-04 21:55:47 · 120 阅读 · 0 评论 -
装饰者模式
装饰者模式(Decorator Pattern)是指在不改变原有对象的基础之上,将功能附加到对象上,提供了比继承更有弹性的替代方案(扩展原有对象的功能),属于结构型模式。装饰者模式的应用场景1、用于扩展一个类的功能或给一个类添加附加职责。2、动态的给一个对象添加功能,这些功能可以再动态的撤销。自定义的FutureTask和Callable接口public interface MyAble { Object my()throws Exception;}public interface原创 2021-02-04 21:07:13 · 91 阅读 · 0 评论 -
适配器模式
适配器模式(Adapter Pattern)是指将一个类的接口转换成客户期望的另一个接口,使原本的接口不兼容的类可以一起工作,属于结构型设计模式。适配器适用于以下几种业务场景已经存在的类,它的方法和需求不匹配(方法结果相同或相似)的情况。原有业务扩展,功能迭代。@Slf4jpublic class LoginService { public void loginForQQ(){ log.info("QQ"); }}public interface LoginA原创 2021-02-04 20:12:18 · 109 阅读 · 0 评论 -
模板模式
模板模式通常又叫模板方法模式(Template Method Pattern)是指定义一个算法的骨架,并允许子类为一个或者多个步骤提供实现。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法的某些步骤,属于行为性设计模式。模板模式应用场景1、一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。2、各子类中公共的行为被提取出来并集中到一个公共的父类中,从而避免代码重复。@Datapublic class Parent { private Node node ;原创 2021-02-04 19:54:03 · 123 阅读 · 0 评论 -
策略模式
策略模式(Strategy Pattern)是指定义了算法家族、分别封装起来,让它们之间可以互相替换,此模式让算法的变化不会影响到使用算法的用户。策略模式的应用场景1、假如系统中有很多类,而他们的区别仅仅在于他们的行为不同。2、一个系统需要动态地在几种算法中选择一种。策略模式实现支付案例public interface PayType { void pay();}public class AliPay implements PayType { @Override原创 2021-02-04 17:26:55 · 260 阅读 · 3 评论 -
委派模式
委派模式(Delegate Pattern)的基本作用就是负责任务的调用和分配任务,跟代理模式很像,可以看做是一种特殊情况下的静态代理的全权代理,但是代理模式注重过程,而委派模式注重结果。@Datapublic class Boss { private Employee emp; public void getMoney(){ emp.work(); }}@Data@Slf4jpublic class Employee { public v原创 2021-02-04 16:56:36 · 107 阅读 · 0 评论 -
代理模式
静态代理代理:为其他对象提供一种代理,以控制对这个对象的访问。静态代理特点:编译期就已经确定了被代理对象和代理对象。@Slf4jpublic class Son{ public void findLove(){ log.info("儿子要求:肤白貌美大长腿!"); }}@Slf4jpublic class Dad { private Son son; public Dad(Son son){ this.son=son原创 2021-02-04 16:47:04 · 141 阅读 · 0 评论 -
原型模式
浅克隆@Data@Accessors(chain = true)public class Employee { private String name; private Integer age; private List<String> hobby; @Override public Employee clone() { Employee emp = new Employee(); emp.setAge(thi原创 2021-02-04 14:49:52 · 112 阅读 · 0 评论 -
单例模式
饿汉式单例模式public class BeanFactory1 { private static Person person =new Person(); public static Person getInstance(){ return person; }}缺点:浪费内存。优点:线程安全。懒汉式单例模式@Datapublic class BeanFactory2 { private static volatile Person pe原创 2021-02-04 11:54:31 · 105 阅读 · 0 评论 -
工厂模式
简单工厂模式public interface Course { void watch(); void write();}@Slf4jpublic class JavaCourse implements Course { @Override public void watch() { log.info("watch..."); } @Override public void write() { log.in原创 2021-02-04 11:54:03 · 118 阅读 · 0 评论