![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
代号毒蝎
这个作者很懒,什么都没留下…
展开
-
(十五)访问者模式
我理解,访问者模式就是用接口嫁接实体类,使得实体类有了一个窗口,可以被接口的实现类访问,进而对实体类做一些操作public class Priority { private Long id; private String name; // get and set public <T> T execute(PriorityOperation<T> operate) ...原创 2020-02-22 23:23:32 · 183 阅读 · 0 评论 -
(十四)责任链模式
基于面向对象的思想,想想业务中哪些流程是可以组装为一个链条的就是说会有一些相似的业务,组成的功能链条可能只是顺序会改变,或会增减链条节点,就可以用责任链模式复用代码每一个Handler都持有下一个Handler的引用,他如果判断还有下一个Handler,就会继续往下执行public abstract class Handler { protected Handler successor;...原创 2020-02-19 23:54:16 · 166 阅读 · 0 评论 -
(十三)装饰器模式
对已有类进行增强public interface Component { void execute();}public class ConcreteComponent implements Component { @Overide public void execute() { System.out.println("基础功能"); }}public class Deco...原创 2020-02-19 23:33:01 · 133 阅读 · 0 评论 -
(十二)享元模式
public interface FlyWeight { String getName(); void setName(String name); void execute();}public class ConcreteFlyweight implements Flyweight { private String name; public ConcreteFlyweight(St...原创 2020-02-16 23:47:39 · 124 阅读 · 0 评论 -
(十一)状态模式
在业务中,常常有那种状态巨多的东西,比如一个立项,可能有新建、已提交、已审批等多种状态一个活动可能有新建、已提交、审核通过、执行中、结束等多种状态因此,这个设计模式,指的是面向一个立项、一个订单这个"对象"的逻辑public interface State { void execute();}public class NewState implements State { publ...原创 2020-02-16 23:32:12 · 121 阅读 · 0 评论 -
(十)命令模式
public interface Command { void execute();}public static class CommandA implements Command { public void execute() { System.out.println("命令A的逻辑"); }}public static class CommandB implements ...原创 2020-02-16 23:05:12 · 83 阅读 · 0 评论 -
(九)策略模式
应该作为ifelse多个条件判断的最佳替代这里不是说ifelse不够清晰,相反,策略模式正是利用了ifelse的清晰因为业务代码中并不是简单的ifelse,而是一个ifelse之间可能间隔了几十行垃圾业务代码,而且判断的条件很模糊,看不懂简单的ifelse当然清晰,策略模式正是将业务代码变成简单的ifelse所以,我们要将代码改造成以下这样:public interface Calcul...原创 2020-02-16 22:57:21 · 121 阅读 · 0 评论 -
(八)构造器模式
想象一下复杂对象的构建逻辑Product product = new Product();System.out.println("为了得到值1,进行复杂的校验");product.setField1("值1");System.out.println("为了得到值2,进行复杂的循环,和数据转换");product.setField2("值2");System.out.println("为...原创 2020-02-16 19:25:00 · 139 阅读 · 0 评论 -
(七)外观模式
外观模式主要用于多个系统间调用假如A系统有123三个模块此时B系统要调用A系统的123,实现自己的业务逻辑问题在于,系统之间是透明的,各自的开发不知道对方的逻辑,导致A从此以后不敢乱改123模块。。。此时就可以用门面模式,将多个模块封装到一个门面中,暴露出去,这样以后只维护这一个门面就行了service就是一个经典的门面模式,别的系统不用直接一戳到底,调用我们的DAO,而是面向我们的se...原创 2020-02-16 18:48:05 · 89 阅读 · 0 评论 -
(六)工厂方法模式
工厂方法模式其实是 模板方法+简单工厂 模式场景:简单工厂就是把我们想生产product的条件丢进去,工厂自己判断,造一个实现类返回给我们现在我们有多个工厂生产多重产品,但每个工厂造每个产品时,都有一些相同的逻辑,和一些不同的逻辑,那此时就可以结合模板方法模式了我们先把简单工厂放进来public interface Product() { void execute();}publi...原创 2020-02-16 18:18:58 · 139 阅读 · 0 评论 -
(五)模板方法模式
将公用的方法放在父类组合,确定顺序,然后实现交给子类结合策略模式使用场景:有不同的优惠券策略,然后每种策略在实现的时候,走的是统一的一套逻辑流程,但又有某些策略的流程不太一样,有一点小特殊流程此时,每种策略的实现就可以用模板方法模式,抽象出公共的顺序如果不用模板方法,代码将是这样的public class StrategyA{ public void calculate() { S...原创 2020-02-16 17:24:55 · 127 阅读 · 0 评论 -
(四)适配器模式
简而言之,就是在新接口中注入老接口的实现类,这样就能既使用新接口,又能复用老接口实现类的方法具体塞入老实现类的逻辑,就是在适配器的构造方法中new之public class NewInterfaceAdapter implements NewInterface { private OldInterface oldObject; public NewInterfaceAdapter (Old...原创 2020-02-16 01:14:22 · 107 阅读 · 0 评论 -
(三)迭代器模式
假设有个学生类Student,教室类Classroom,教室类中有学生类的数组型的私有变量public class Student{}public class Classroom{ private Student[] students;}如果我们将他们new出来,然后组合在一起,如果我们只有教室类,这时想要遍历学生那么只要new教室类,然后get学生数组,然后for循环遍历学生即可...原创 2020-02-16 00:47:17 · 142 阅读 · 0 评论 -
(二)简单工厂模式
站在更高的层面考虑,简单工厂其实也是一种中间件思想假设有这样一种常见的场景,有一个基类叫common,是一个抽象类,封装了需要子类实现的功能,以及公用的功能子类A和B就是业务方要我们实现的功能,他们继承了公用的功能,同时又实现了自己特有的功能好,现在我们业务代码写好了,前端代码可以调用我们的业务功能A和B在自己内部判断,如果用户需要A功能,就调用A,如果用户需要B功能,就调用B,此时他是依...原创 2019-09-08 22:51:33 · 93 阅读 · 0 评论 -
(一)单例模式
单例已经被被讲烂了为什么用?主要是为了避免频繁创建某个常用对象,节省资源一共有八种写法,主要是创建对象的地点和时机各不相同,但总的来说只要注意写出四点一是将类私有化,二是该类自己创建一次,三是有一个外部获取的方法,四是线程安全1.饿汉式,静态常量private单例类的构造函数,使得外部不能创建该对象用一个静态的常量表示单例对象,表示该对象只有一份自己new一次赋值给该常量,然后写一个...原创 2019-09-08 22:19:07 · 90 阅读 · 0 评论 -
设计模式——总纲
一句话概括,设计模式是对软件设计中普遍存在的(重复出现的)各种问题,提出的解决方案简单说就是一种写代码的最佳实践用了设计模式有什么好处?使得程序高内聚低耦合程序可靠性高,就是说增减功能系统不会随便挂掉程序扩展方便,就是说增加功能改代码很方便程序重用性好,就是说不用重复写代码,都提出公共代码了程序可读性好,就是接手的人不会云里雾里看不懂设计模式分类创建型,就是说对象应该怎么创建,比...原创 2019-09-08 19:43:13 · 114 阅读 · 0 评论