设计模式感悟随笔

1.身为初级程序员大部分都是Ctrl+c和Ctrl+v 是一个很不好的编码习惯,当下一次运用Ctrl+c和Ctrl+v 的时候可以自己考虑一下把该代码进行一次重构封装。

2.开放-封闭原则,以后在定义好一个类的时候假设不会变化,而在第一次因为种种原因进行修改时,就要重构代码,不能在同一个地方倒下两次。

3.简单工厂模式在于传入一个参,用该参来判定到底生成一个什么对象,并返回该对象。而策略模式在于直接通过构造方法传入一个对象的子类,来通过子类的类型来确认调用什么方法,进而可以用到反射生成该对象,字符串可以为变量。

6.工厂方法模式,跟简单工厂模式不同的在于,把工厂类进行接口化,进而实现了,对应的要工厂返回的抽象类对应的几个子类工厂类,而每次新增新功能的时候只需要多继承出一个子类,在实现一个工厂类。就可以做到。

4.装饰模式,定义一个接口,继承接口的被装饰对象,继承接口的装饰抽象类,继承装饰抽象类的的几个具体装饰类,通过构造方法把装饰对象存入装饰类中,在通过调用接口的装饰抽象方法根据子类重写不同的方法来确认调用的装饰方法。

5.代理模式,定义一个接口,实现一个被代理的类,实现一个代理类,该代理类拥有被代理类的引用,重写方法,实际实现的方法都为该引用调用的方法。

7.里氏代还原则子类型必须可以替换父类型。

8.模板方法,当子类中不变的和可变的混合在一起时候,不变的就会在子类中重复出现,我们就可以把重复的提取出来,提取到单一的一个类中,可以帮子类摆脱重复的行为。

9.外观模式,通过一个接口持有多个类的引用,把复杂凌乱的关系,简化。

10.建造者模式,一个抽象接口,该接口定义了被建造的所有组件,具体的几个实现类,具体的实现了不同的建造物,然后会有个返回方法,返回一个对象,该对象是建造好的对象。还有一个指挥者接口,该接口持有建造者接口,通过构造方法实例的时候传入的构造者类型来确定构造具体对象。持有者接口还有一个方法,该方法就像一个工作流一样,把一个个不同的组件组装成一个成品对象。

11.观察者模式,当一个对象改变时,要通知所有其他对象时,使用观察者模式。观察者模式主要功能在于解除耦合,让耦合双方都依赖接口,而不是依赖具体。

12.类与类之间的耦合双方都依赖接口,而不是依赖具体,能进行接口化就进行接口化,能进抽象的就进行抽象。

13.抽象工厂方法,一个抽象工厂接口,实现不同的具体工厂类,根据工厂类的不同,返回不同类型的对象。简单工厂方法配合反射机制可以有效的消灭if判断。

14.状态模式,定义一个状态接口,几个具体实现的状态,把不同的状态下的具体功能放到不同的实现类中,在根据当前对象传入的判断条件,判断是否进行状态切换,一个拥有状态引用的的主体类,根据不同的状态调用状态的具体实现。

15.适配器模式,可以通过一个类持有一个要被适配的类的引用,在通过重写方法,把该引用的方法写在重写的方法中。

16.备忘录模式,一个备忘录类用来保存需要记录的数据。一个管理者类用来储存已经记录的数据(备忘录对象的引用)。主体类,拥有保存和回复功能方法,保存返回一个备忘录对象,把该对象交个管理者,回复从管理者中拿到备忘录对象通过回复方法进行数据恢复。

17.组合模式,定义一个组合接口有增加删除显示功能,还可以根据具体业务抽象方法。两种实现类,细分可以分出三种,一种是枝,一种是叶,还有一种也是枝但是它是第一个枝所以是根。在枝的实现类中有一个集合泛型为该接口类型,就可以任意添加删除。

18.迭代器模式,声明一个抽象类用来存放集合,一个接口迭代器接口,实现抽象类一个集合变量,用来存放遍历数据,拥有两个方法一个返回集合数量,一个为根据索引获取数据,还可以拥有一个方法创造一个迭代器。迭代器的接口根据迭代要求实现该类。

19.单例模式,通过private自己的构造方法,可以自己履行自己单例的职责,在声明一个自己的静态变量,用于判断是否可以进行实例化。在给外界一个静态方法用来获取该对象。分懒汉模式和饿汉模式,恶汉模式占系统资源,但懒汉模式可能引发多线程的时候造成多次实例化,需要加线程锁来保证单例模式的安全。

20.继承是一种强耦合,而聚合和合成松耦合,不是什么时候都适合用继承。

21.桥接模式,实现一个系统可以有多角度分类,每一分类都都有可能变化,而只用继承会造成大量的类增加,不能满足开放封闭原则的时候就该考虑桥接模式了。将抽象部分抽出一个抽象类,将能实现的部分抽出一个接口,抽象类的不同实现,持有一个接口类型的引用,根据抽象类的实现和接口的实现不同实现了桥接模式的灵活组合。

22.命令模式,有一个具体实施的对象,一个执行操作的接口,实现该接口的类,该类引用具体实施的对象,通过执行方法,执行具体操作,一个接受命令的类,该类拥有一个执行接口类型的变量,通过他来下达命令。

23.职责链模式,定义一个处理请求接口,该接口拥有执行方法和指定下一处理者的方法,分别实现该接口,只需要使用的时候灵活定义下一处理者就行,但是必须把每一个实现类中的处理请求的判断写好,以免逻辑混乱。

24.中介者模式,定义一个中介者抽象类,一个需要的接口,分别实现。中介者实现类必须拥有所有需要中介对象的引用为变量。而实现接口的类必须拥有中介者类型的引用,已便调用中介者进行通知,而中介者就必须在内部进行复杂判断,中介中引用越多,越复杂。

25.亨元模式,一个父类或接口,两种不同的实现,一种是需要共享的实现,一种为不需要共享的实现。一个亨元工厂方法,一个集合成员变量用来存贮需要共享的对象,一个获取方法通过该方法来获取共享对象,没有则创建实例在添加到集合中,然后返回。亨元模式还分内部状态和外部状态,内部状态是不会随着外部环境改变而改变,而外部状态会随着外部环境改变而改变,当确定大量重复的类中只有除了几个参数不同而大量参数相同时可以考虑使用元亨模式,把仅有的几个外部状态的参数,通过传参传入。

26.解释器模式。一个解释表达式的抽象类,分别实现不同表达式代表的实现类。

27.访问者模式。适用于数据结构稳定的系统,它把数据结构和作用于结构上的操作之间的耦合解脱开。定义一个对象的抽象类(该对象的实现必须稳定个数),分别实现他的子类。定义一个访问者接口,每多一个实现对象该接口就会多一个访问方法。拥有多少个不同的访问就实现多少个类。然后通过双分派技术,通过子类的类型来确定调用那个类的方法,在通过把自身当做参数传入该方法已确定该方法调用什么类型。还可以添加一个高层次的类用来存放集合,添加,删除,枚举。

posted @ 2018-03-14 14:49  薄焦尾  阅读(127)  评论(0编辑  收藏  举报