常见的设计模式

    xiaoxiao2021-09-01  114

    1、单例模式      特点:私有构造函数(只有一个不能给提供给外界创建)getInstance() (但是又要提供给外界使用),它不能再给外界实例化,所以只能在getInstance里创建,同时使getInstance静态(外界没有实例对象如何调用改方法,只能是静态),并且保证只有一个,加锁:      public class SingleInstance {

    private static SingleInstance singleInstance; private SingleInstance() { } public static SingleInstance getSingleInstance() {// 此处是static,只能说明singleInstance也是静态 if (singleInstance == null) { synchronized (SingleInstance.class) { if (singleInstance == null) singleInstance = new SingleInstance();  } } return singleInstance;  } }

    2、观察者模式:

    所谓观察者模式,是一种类似报纸订阅者关系,(1对多的依赖关系)如何保证当被观察者发生改变就通知到其他任何订阅者,就是在让订阅者去订阅,也就是所有的。那就在被观察者中定义一个List<Observer> 遍历通知,所以被观察者是一般有三个方法有一个attach(),detach(),还要通知其他人notifyObservers()

    抽象主题:集合里保存所有订阅者,每个主题提供一个接口可以增加和移除观察者

    public interface Subject { public void addListener(Listener listener); public void deleteListener(Listener listener); public void notifyListener(); }

    具体主题: 

    public class Lights implements Subject{ private ArrayList<Listener> lights; //collection 用于保存 观察者的集合  private String whichLight; private String currentLight = "green"; //记录当前 交通灯的状态  private int time; //记录交通灯持续的时间  public Lights(){ lights = new ArrayList();  } //实现 添加一个观察者的操作  @Override  public void addListener(Listener listener){ lights.add(listener);  } //实现删除一个观察者的操作  @Override  public void deleteListener(Listener listener){ int index = lights.indexOf(listener); if( index != -1){ lights.remove(index);  } } //实现通知的机制 ,通知每一个观察者  public void notifyListener(){ int size = lights.size(); for(int i = 0; i < size; i++){ Listener listener = (Listener)lights.get(i);  listener.updateSignal(whichLight,time);  } } //更新主题状态数据的方法  public void setLight(String whichlight,int time){ this.whichLight = whichlight; this.time = time;  //检查状态是否发生了变化  check(); this.currentLight = whichLight;  } //实现检查状态的函数  private void check(){ if(! this.currentLight.equals(this.whichLight)){ notifyListener();  } } }

    抽象观察者:

    public interface Listener { public void updateSignal(String whichLight,int time); } 具体的观察者: public class RedLightListener implements Listener{ @Override //模拟接收通知,更新状态  public void updateSignal(String whichLight, int time){ if(whichLight.equals("red")){ System.out.println("红灯亮了,禁止通行");  System.out.println("持续时间: "+time);  } } }

    3、适配者模式: 将一个类的接口转换成客户希望的另一个接口,使得原本由于接口不兼容儿不能一起公的那些类可以一起工作: a:类适配模式:新的业务类通过继承旧的业务类并实现其他接口来满足新业务的一种适配方式 b:对象适配模式:

    转载请注明原文地址: https://ju.6miu.com/read-677364.html

    最新回复(0)