常用设计模式

里氏替换原则:子类可以扩展父类的功能,但是不要更改父类的已经实现的方法
  子类对父类的方法尽量不要重写和重载。(我们可以采用final的手段强制来遵循)

创建型模式
单例模式:维护线程数据安全
懒汉式
public class Test{
饿汉式
private static final Test test=new Test();
//构造私有化
private Test(){}
public static Test getInstance(){
return test;
 }
}

饿汉式
public class Test{
饿汉式
private static Test test=null;
//构造私有化
private Test(){}
public static synchronized Test getInstance(){
      if (test==null) test=new Test();
      return test;
 }
}

工厂模式:隐藏创建细节,实现对象的生产
public class ConnectionFactory{
public Connection create(String connectionName){
switch(connectionName){
   case "redis":
     return new RedisConnection;
   cases "mysql":
     return new MysqlConnection;
   default :
     return null;
  }
 }
}




结构型模式
装饰着模式:注意.装饰者模式和静态代理模式实现一样,但是装饰者模式侧重的是类的假强,静态代理侧重的是方法的加强
interface Persion{
    void said();
}
class  Men implements Persion{
    @Override
    public void said() {
        System.out.println("man said");
    }
}
class OldMen implements Persion {
    private Persion persion;
    public OldMen(Persion persion){
        this.persion=persion;
    }
    @Override
    public void said() {
        persion.said();
        System.out.println("oldMan said");
    }
}

代理模式(反射):
静态代理(编译后不可更改对象的行为):
  静态代理和装饰者模式是一样的实现方式,可以完成同样的事情,但是代理模式侧重方法的加强,而装饰者模式侧重类的加强
动态代理(动态的更改对象的行为属性)
  jdk动态代理
  cglib动态代理模式


行为型模式
观察者模式:
interface Observer {
    //观察谁
    abstract void update(BeObserver beObserver);
}

class BeObserver {
    List list = new ArrayList<>();
    private int statues;

    public void setList(int statues) {
        this.statues = statues;
        notifyAllObserver();
    }

    public void notifyAllObserver() {
        list.forEach(s -> s.update(this));
    }
}

你可能感兴趣的:(设计模式,代理模式)