软件构造之java24个设计模式汇总

java24个设计模式汇总

之后会陆续增加设计模式使用情景的一句话说明,敬请期待

策略模式【STRATEGYPATTERN】
策略模式类似于锦囊+妙计的组合,我们先实现几个妙计(基于接口编程),然后放到Context类中(其实更确切地说是在运行时把Context变成相应的妙计),然后通过调用Context的operate方法来达到运行相应妙计的结果 。

代理模式【PROXYPATTERN】
代理模式是比较简单的一个模式,类似于 秘书和经理的角色,秘书可以帮助经理接电话、出席活动等,而这也是经理本可以做的活动。代理模式也提供一个类似于容器的东西,其实我本来觉得代理模式和策略模式没有什么区别,但是 阅读了下面这段话就懂了:

简单代理模式中,代理类知道被代理类的行为,因为代理类与被代理类实现的是同一个接口,因此代理类与被代理类的结构是相同的;
例如对ImageLoader的封装,AndroidCleanArchitecture中Data层的封装。
策略模式中,策略容器并不知道内部策略的详细信息,因为容器并没有实现与内部策略相同的接口,即容器与内部策略只是简单的组合关系,容器只是将内部策略的行为抽取出来,进行了统一的实现.

单例模式【SINGLETON PATTERN】
单例模式关键在于实现一个IF分支函数,当当前类为空时创建一个实例,非空时就返回这个实例。这个模式的关键是所谓的单例中有一个对于本身对象的引用,刚才提到的方法也是在单例类中,此外,这个单例类的构造函数为private修饰,避免被其他类引用重复创建。

多例模式【MULTITION PATTERN】
和上面的类似,就是限定为一个改成了限定为常数多个,然后在操作的时候先用static静态初始化块创建指定多个实例并加入到list中,剩下的使用和单例模式的一样。
工厂方法模式【FACTORY METHOPATTERN】
工厂方法模式我们在学习创建图的时候用到了,先是factory接口只有create方法,返回值当然是最广泛的抽象类或者是接口 ,然后graphfactory母类和各具体图的创建类都用同样的create方法,进行创建。

要记得这点
返回的类型是接口,但是接口是不能实例化的,但是接口可以声明一个引用,指向其实现类,也就是说,在实际中返回值都是这个接口的实现类的对象。这点就是面向对象的一大特点。

抽象工厂模式【ABSTRACT FACTORY PATTERN】
我从以下几个方面来理解抽象工厂和工厂方法不同点
抽象工程关键在于产品之间的抽象关系,所以至少要两个产品;工厂方法在于生成产品,不关注产品间的关系,所以可以只生成一个产品。
抽象工厂中客户端把产品的抽象关系理清楚,在最终使用的时候,一般使用客户端(和其接口),产品之间的关系是被封装固定的;而工厂方法是在最终使用的时候,使用产品本身(和其接口)。
抽象工厂更像一个复杂版本的策略模式,策略模式通过更换策略来改变处理方式或者结果;而抽象工厂的客户端,通过更改工厂还改变结果。所以在使用的时候,就使用客户端和更换工厂,而看不到产品本身。
工厂方法目的是生产产品,所以能看到产品,而且还要使用产品。当然,如果产品在创建者内部使用,那么工厂方法就是为了完善创建者,从而可以使用创建者。另外创建者本身是不能更换所生产产品的。

门面模式【FACADE PATTERN】
门面模式虽然看了很多遍,但是还是有点记不住。简单来讲,就是让客户端只看到门面,中间很多的步骤都由执行者来完成,这个和代理模式不同的地方是:做事情的是客户端,而在代理模式则侧重于做事的经理。我觉得抽象来讲,就是发起动作的主体不同吧。
适配器模式【ADAPTER PATTERN】
之前的数据接口是A,现在的数据类型是类B,通过增加适配器,让适配器继承类B,实现接口A,就可以用调用A的方法调用 适配器,得到B的信息,非常方便。
模板方法模式【TEMPLATE METHOD PATTERN】
模板方法模式关键在于在抽象类中写一个子类中都要调用的方法(关键字设为final),这个方法是子类中重写的方法的集锦,以某种顺序排列。

建造者模式【BUILDER PATTERN】
对于一个具体实现类,在创建的时候可能需要安排很多的特征,比如模板方法调用其他方法的顺序等等,这时候就需要建造者模式出场了,bulider规定了要赋给具体类值得方法,然后director类调用这些bulider方法,产生具体类的实例返回给客户端使用。

桥梁模式【BRIDGE PATTERN】
桥梁模式把两个有关的东西分开,比如工厂和产品,产品可以更改,但是都在一个工厂下生产,即各种类的组合和包含就用桥梁模式来实现。

命令模式【COMMAND PATTERN】
使客户端调用尽可能少的代码,更改时修改尽可能少的方式来执行,需要一个invoker来存储command,给command赋值、让其执行,主要实现在command代码中,执行excute之后进行相应的操作,这种封装类似于模板方法的封装,但是这里不强调子类和父类的特殊关系。

装饰模式【DECORATOR PATTERN】
通过一层一层的装饰来达到最终功能越来越强大的结果,即要增加一个功能,就继承父类后,重写方法,然后先调用 父类的方法,增加自己定义的特殊功能即可,这种调用可以一层一层迭代,最终达到功能越来越强大的效果。
迭代器模式【ITERATORPATTERN】
即继承Iterator接口,调用hasNext()和next()方法。
组合模式【COMPOSITEPATTERN】

观察者模式【OBSERVERPATTERN】 ……………………………………………………………………………………
责任链模式【CHAIN_OF_RESPONSIBILITY_PATTERN】 ……………………………………………………………….
访问者模式【VISITORPATTERN】 ………………………………………………………………………………………..
状态模式【STATEPATTERN】 ………………………………………………………………………………………………
原型模式【PROTOTYPEPATTERN】 ………………………………………………………………………………………
中介者模式【MEDIATORPATTERN】 …………………………………………………………………………………….
解释器模式【INTERPRETER_PATTERN】 …………………………………………………………………………………
亨元模式【FLYWEIGHTPATTERN】 ……………………………………………………………………………………….
备忘录模式【MEMENTO_PATTERN】 …………………………………………………………………………………….

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值