设计模式

设计模式的七大原则

开闭原则:对拓展开放,对修改关闭。如需求变化,尽可能托钻,而不是修改原来的代码。

单一职责:一个类只做一件事情,避免职责太多,难以维护。

接口隔离:接口进行拆分细化,需要哪个实现哪个,避免不必要的实现。和单一职责类似。

依赖倒置:多态,依赖于接口,而不依赖于具体的实现。

里氏替换:继承中父类应该保持原有的性质在子类中任然成立。

迪米特法则:一个软件实体对其他实体的引用越少越好,只跟朋友交谈不跟陌生人交谈,a和b交谈,a和c不交谈。

合成复用原则:多用组合,少用继承,如果要使用继承要综训里氏替换原则,超类的东西必须在子类中依然成立。

总结:目的解决耦合性问题,面向接口编程而不是面向具体的实现。

https://www.cnblogs.com/WindSun/p/10223080.html

单例

保证一个类仅有一个实例。

1.私有化的构造函数

2.私有的静态的全局变量

3.公有的静态的方法

饿汉式:

public class Singleton1 {

      private Singleton1() {};

      private static Singleton1 single = new Singleton1();

      public static Singleton1 getInstance() {

          return single;

     }

 }

懒汉式:

public class Singleton2 {

      private Singleton2() {}

      private static Singleton2 single=null;

      public static Singleton2 getInstance() {

           if (single == null) {  

              single = new Singleton2();

          }  

         return single;

     }

工厂:

 

 

简单工厂:传什么造什么。

工厂模式:每个工厂只生产一种产品,客户端通过不同的工厂去生产不同的产品,具体生产什么产品工厂觉得,客户只需要制定工厂。 

抽象工厂:抽象工厂是对工厂的抽象。

https://blog.csdn.net/weixin_35985385/article/details/81430545

https://www.cnblogs.com/peter_zhang/p/AbstractFactory.html

代理

静态代理:对代理类进行包装,实现代码。

jdk动态代理:InvocationHandler的getProxy()通过反射获取代理对象,执行invoke实现代理并返回结果。改目标类就行,可以代理多个类。面向接口。

CGLIB: MethodInterceptor的intercept执行回调。

1)JDK动态代理只能对实现了接口的类生成代理,而不能针对类。

2)CGLIB是针对类实现代理,主要是对指定的类生成一个子类。如果目标对象没有实现接口,则默认会采用CGLIB代理;

适配器

将一个接口转化成客户希望的接口,使得不兼容的接口不能一起工作可以一起工作。

https://www.cnblogs.com/qinggege/p/5233859.html

 

观察者:

发布订阅模式,被观察者将要观察的对象添加到集合里面,然后执行通知,对象间存在一对多关系,当一个对象被修改时,自动通知其他的依赖对象

 https://blog.csdn.net/cenjianteng/article/details/105827272

状态模式

状态改变影响其行为,将状态抽取出来给与不同的实现,执行时方法依赖状态的接口,,调用时穿那个状态执行那个操作。

魔板模式:

 

posted @ 2020-09-04 10:24  91程序猿  阅读(126)  评论(0编辑  收藏  举报