首页 > 学院 > 开发设计 > 正文

设计模式

2019-11-08 01:25:12
字体:
来源:转载
供稿:网友

一创建型模式1工厂方法模式Factory Method1 普通工厂模式2 多个工厂方法模式3 静态工厂方法模式2抽象工厂模式Abstract Factory3单例模式Singleton1 第一种方式静态内部类2 第二种方式双重校验锁4建造者模式Builder5原型模式PRototype二结构型模式6适配器模式Adapter1 类的适配器模式2 对象的适配器模式3 接口的适配器模式7装饰模式Decorator8代理模式Proxy9外观模式Facade10桥接模式Bridge11组合模式Composite12享元模式Flyweight三行为型模式第一类 父类与子类13策略模式Strategy14模板方法模式Template Method第二类 类与类15观察者模式Observer16迭代子模式Iterator17责任链模式Chain os Responsibility18命令模式Command19备忘录模式Memento20状态模式State21访问者模式Visitor22中介者模式Mediator23解释器模式Interpreter

一、创建型模式

1、工厂方法模式(Factory Method)

1.1 普通工厂模式

解释:就是建立一个工厂类(无接口),对实现了同一接口的一些类进行实例的创建,测试时根据工厂类中核心方法的输入d的String类型的参数返回不同类型的实例。

1.2 多个工厂方法模式

解释:将普通工厂模式的工厂类中的核心方法拆成了多个方法,不再需要输入参数,不同的方法对应返回不同类型的实例。

1.3 静态工厂方法模式

解释:将多个工厂方法模式的工厂类里的方法置为静态的,不需要再创建工厂方法实例,直接用静态类调用即可。 使用情境:出现了大量产品需要创建,并且具有共同的接口,推荐使用1.3

2、抽象工厂模式(Abstract Factory)

解释:为工厂方法模式中的工厂类增加一个共同的接口,将核心方法拆成多个方法的方式改为将工厂类拆成具有统一接口的不同实现类,从而增强代码的可拓展性。

3、单例模式(Singleton)

3.1 第一种方式(静态内部类)

Public class Singleton{Private Singleton(){} Private static class SingleFactory{ Private static Singleton instance=new Singleton(); } Public static Singleton getInstance(){ Return SingletonFactory.instance; }}

这种方式同样利用了classloder的机制来保证初始化instance时只有一个线程,这种方式是Singleton类被装载了,instance不一定被初始化。因为SingletonHolder类没有被主动使用,只有显示通过调用getInstance方法时,才会显示装载SingletonHolder类,从而实例化instance。

3.2 第二种方式(双重校验锁)

Public class SingletonTest{Private static SingletonTest instance=null;//静态化,防止被引用,赋值为空,延迟加载,//提高性能Private SingletonTest(){//私有构造方法,防止被实例化}Private static synchronized void syncInit(){//在创建类时进行同步 If(instance==null){ Instance=new SingletonTest(); }}Public static SingletonTestgetInstance(){//静态方法创建实例 If(instance==null){ syncInit(); } Return instance;}}

4、建造者模式(Builder)

解释:用工厂方法模式创建单个类后再将各种产品集中起来进行管理,即创建复合对象(如List)

5、原型模式(Prototype)

Public class prototype implements Cloneable,Serializable{Private static final long serialVersionUID=1L;Private String string;Private SerializableObjectobj;Public Object clone() throws Exception{Prototype proto=(Prototype)super.clone();Return proto;}Public Object deepClone() throws Exception{ByteArrayInputStreambis=new ByteArrayOutputStream();ObjectOutputStreamoos=new ObjectOutputStream(bos);Oos.writeObject(this);ByteArrayInputStreambis=new ByteArrayInputStream(bos.toByteArray());ObjectInputStreamois=new ObjectInputStream(bis);Return ois.readObject();}

二、结构型模式

6、适配器模式(Adapter)

6.1 类的适配器模式

解释:有一个Source类,拥有一个方法,待适配,目标接口是Targetable,通过Adapter(继承Source,实现Targetable)类,将Source的功能扩展到Targetable里

6.2 对象的适配器模式

解释:将类的适配器模式中的Adapter类做修改,这次不是继承Source类,而是持有Source类的实例

6.3 接口的适配器模式

解释:借助于一个抽象类,该抽象类实现了该接口,实现了所有的方法,我们写一个类,继承该抽象类,重写我们需要的方法即可

7、装饰模式(Decorator)

解释:要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例,从而动态为其增加一些新的功能

8、代理模式(Proxy)

解释:和装饰模式相似,强调的是对原有方法的进行改进并替换,被代理的类在代理类中自动初始化,无需在外部创建

9、外观模式(Facade)

解释:将多个不同的类作为一个Façade类中的属性,并将它们的关系在Façade类的方法中表达,从而在没有涉及接口的情况下降低了类之间的耦合度

10、桥接模式(Bridge)

解释:通过传入集成了同一接口的不同子类作为属性,从而在桥接类方法不变的情况下动态表达出不同的结果 例子:jdbc连接不同类型的数据库的原理

11、组合模式(Composite)

解释:将多个对象组合在一起进行操作,常用于表示树形结构中 例子:二叉树

12、享元模式(Flyweight)

解释:对象负责创建和管理享元单元,当一个客户端请求时,工厂需要检查当前对象池中是否有已存在的对象,如果没有,则创建新的。 例子:数据库连接池

三、行为型模式

第一类 父类与子类

13、策略模式(Strategy)

系统本身使用实现了同一接口的不同算法类提供不同算法的实现,使用哪一个算法由用户决定,多用在算法决策系统中

14、模板方法模式(Template Method)

解释:一个抽象类中,有一个主方法,再定义1…n个方法,可以是抽象的,也可以是实际的方法,定义一个类,继承该抽象类,重写抽象方法,通过调用抽象类,实现对子类的调用

第二类 类与类

15、观察者模式(Observer)

解释:当一个对象变化时,其它依赖该对象的对象都会收到通知,并且随着变化!对象之间是一对多的关系。主对象MySubject继承包含了需要监控的对象列表的AbstracSubject,可以对其进行修改、增加、删除被监控对象,且当主对象改变时,负责通知监控对象 第三类 一种一对多的关系

16、迭代子模式(Iterator)

解释:顺序访问聚集中的对象,一是需要遍历的对象,即聚集对象,二是迭代器对象,用于对聚集对象进行遍历访问 例子:Collection和Iterator

17、责任链模式(Chain os Responsibility)

解释:有多个对象,每个对象持有对下一个对象的引用,这样就会形成一条链,请求在这条链上传递,直到某一对象决定处理该请求。但是发出者并不清楚到底最终那个对象会处理该请求

18、命令模式(Command)

解释:命令模式的目的就是达到命令的发出者和执行者之间解耦,实现请求和执行分开。从整个事情的角度来考虑,司令员的作用是,发出口令,口令经过传递,传到了士兵耳朵里,士兵去执行。这个过程好在,三者相互解耦,任何一方都不用去依赖其他人,只需要做好自己的事儿就行,司令员要的是结果,不会去关注到底士兵是怎么实现的 第三类 类的状态

19、备忘录模式(Memento)

保存一个对象的某个状态,以便在适当的时候恢复对象,个人觉得叫备份模式更形象些,通俗的讲下:假设有原始类A,A中有各种属性,A可以决定需要备份的属性,备忘录类B是用来存储A的一些内部状态,类C呢,就是一个用来存储备忘录的,且只能存储,不能修改等操作

20、状态模式((State)

解释: 当对象的状态改变时,同时改变其行为,很好理解!就拿QQ来说,有几种状态,在线、隐身、忙碌等,每个状态对应不同的操作,而且你的好友也能看到你的状态,所以,状态模式就两点:1、可以通过改变状态来获得不同的行为。2、你的好友能同时看到你的变化。 例子:权限控制

21、访问者模式(Visitor)

解释:访问者模式就是一种分离对象数据结构与行为的方法,通过这种分离,可达到为一个被访问者动态添加新的操作而无需做其它的修改的效果

22、中介者模式(Mediator)

解释:也是用来降低类类之间的耦合的,因为如果类类之间有依赖关系的话,不利于功能的拓展和维护,因为只要修改一个对象,其它关联的对象都得进行修改。如果使用中介者模式,只需关心和Mediator类的关系,具体类类之间的关系及调度交给Mediator就行,这有点像spring容器的作用

23、解释器模式(Interpreter)

解释:解释器模式是我们暂时的最后一讲,一般主要应用在OOP开发中的编译器的开发中,所以适用面比较窄。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表