设计模式

一) 策略模式

 

很好地解决了继承和接口各自的不足。

1) 继承:因为所有的子类都继承了父类的方法,所以对于部分子类共有的方法,而另一部分子类没有的方法。只能用子类覆盖的方式来解决(要么父类不提供抽象方法,在需要的子类中新增此方法)。

2) 接口:比1) 中红色字的方法更好的方式是使用接口,这样子类更统一,强制子类必须实现某些接口方法。但是这样仍然使得各个子类都必须去实现多个接口。

3) 策略模式:

    要点1:父类中包含“行为组合”变量(声明接口的变量,此父接口变量可指向一组行为中的任何一个)。

    要点2:行为组合——统一的行为接口,每个行为必须继承此接口。

4)体现的编程原则:

     1.针对接口编程,不要针对实现编程

     2.“有一个"(has a)比"是一个"(is a)更好。

 

二) 观察者模式

 

1)记忆方法

 

     a)

     主题:必须有三个方法registerObserver(Observer o),removeObserver(Observer o),notifyObservers(Observer o)。(java。util.Observable: addObserver(),deleteObserver(),notifyObservers()).

     观察者:必须有update()方法(或其他需要的方法,用接口表示。)

     以上两部分都用接口表示出来,让主题和观察者实现这些接口。确保主题和观察者内有这些方法。

 

     b)你中有我,我中有你

     主题:notifyObserver时,调用Observer的update方法。

     观察者:构造函数内,调用主题的registerObserver(Observer o)方法。

 

三) 装饰者模式

     1)记忆方法

           a)装饰者中有两个对象:装饰者和被装饰者。

           b)装饰者必须继承自被装饰者。

     2)调用过程图解有点像递归。

 

四) 工厂模式

 

    1)简单工厂:只是简单的将程序中new的部分(带if else 的参数判断)抽象出来。

    2)工厂方法和抽象工厂方法:工厂方法和抽象工厂方法都有简单工厂的影子,不同的是:工厂方法使用继承,让子类决定要实例化的类是哪一个;而抽象工厂方法使用对象组合(接口或抽象类都可以)。抽象工厂可以理解为多条平行的工厂方法的集合。

     结束语:在设计中,但凡有new的地方(创建对象的地方)就可以引入“工厂”。

 

五) 单件模式

    1)

     要点1:要有一个静态变量;

     要点2:获取静态变量时,判断是否已经生成;已经生成过,就读取,没有生成过就新建一个。

    2)双重检查加锁(volatile)

       第一次检查:为了让程序只有在静态变量uniqueInstance未被创建时才执行“同步”。

       第二次检查:是同步块内原本就需要的。没有它可能会创建多个静态变量uniqueInstance。

       备注:不同现场仍然有可能会分别运行第一次的检查,即不同线程执行第一次检查的总次数多于一次。

   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值