观察者/发布/订阅模式此模式用于对象之间有一对多的依赖。定时:定义了对象之间一对多的依赖,这样一来,当一个状态改变的时候,它的所有依赖者都会通知并自动更新。(当一个状态发生改变时,其他的依赖者都会收到通知)。比如像当当网、京东商城一类的电子商务网站,如果你对某件商品比较关注,可以放到收藏架,那么当该商品降价时,系统给您发送手机短信或邮件。这就是观察者模式的一个典型应用,商品是被观察者,有的叫主体;关注该商品的客户就是观察者。目的:将主题和观察者分开,为了交互对象之间松耦合。使系统变的有弹性。
策略模式场景:此用于对象固定,而对象的行为n的时候情况(鸭子固定,改变的是鸭子的行为)定义:定义了算法族,将他们分别封装起来,让他们之间可以相互的替换,此模式让算法的变化独立于使用算法的客户。理解:将算法/行为和客户/对象采用组合的方式进行。 例子:将鸭子定义为一个类(Duck),鸭子的行为(Behavior)定义一个类,这样鸭子的行为不是继承而来,而是和适当的行为组合(composition)而来的。
单例模式的几种实现懒汉模式 优点:第一次调用才初始化,避免内存浪费。缺点:必须加锁synchronized 才能保证单例,(如果两个线程同时调用getInstance方法,会chuxia)但加锁会影响效率。public class Singleton { //注意 分布式系统中慎用 多线程同步 构造函数私有化 private static volatile Singleton st; private Singleton (){} public static Singleton getInstance() { if (null == st) { synchronized (Singleton.class) { if (st == null) { st = new Singleton(); return st; } } } return st; } } 2.饿汉式单例优点:没有加锁,执行效率会提高。缺点:类加载时就初始化,浪费内存public class Singleton {private static final Singleton SINGLETON = new Singleton();private Singleton() {} //此类不能被实例化public static synchronized Singleton getInstance() {return SINGLETON;} 3.登记式模式(holder)内部类只有点,是最好的单例模式。public class Singleton {private Singleton() {} //构造方法是私有的,从而避免外界利用构造方法直接创建任意多实例。public static Singleton getInstance() {return Holder.SINGLETON;}//使用内部类嵌套类的对象,并不需要其外围类的对象。 即它可以不依赖于外部类实例被实例化。private static class Holder {private static final Singleton SINGLETON = new Singleton();}
在程序中不要刻意的使用设计模式,让你程序在不断修改中你感觉到设计可以简化编码甚至简化业务逻辑的时候,你就可以考虑重新设计一下。
在一般程序设计的时候,少用继承的模式,多用组合的模式
在设计的时候可以使用UML建模工具帮助简化设计的过程