个别设计模式要点的简单描述

一、单例模式:

定义:保证一个类仅有一个实例,并提供一个访问它的全局的访问点。

要点: 1、为了保证不能在类的外部实例化对象,类的构造函数要是私有的。

2、在类的内部实例化一个静态的对象。

3、提供公一个公有的静态方法由于返回要点2实例化的对象。

二、简单工厂模式

在工厂类的内部通过传入的字符串来选择实例化不同的类的对象。

三、工厂方法模式

工厂方法模式是对简单工厂模式进行了进一步的抽象,定义了一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到了其子类。

与简单工厂的比较:在简单工厂模式中,我们通过一个switch-case或多个if-else来判断实例化那个子类对象。而在工厂方法中,我们对工厂类进行了处理,通过抽象出一个接口IFactory,并在子类中实现IFactory生产产品的方法,把要生产何种产品的判断直接交给客户端去做。

这样做的好处是消除了简单工厂所违背的开发-封闭原则。举例来说,在简单工厂模式中,当我们要添加一种新的产品时,我们不得不在工厂类中添加一个case分支,货if-else语句,这就破坏了开发-封闭的原则(对扩展开发,对修改封闭)。工厂方法模式消除了这个破坏:如果你想在添加一种新的产品时,你不用修改任何代码,需要做的是去实现IFactory类。这可以说是工厂方法模式的优点。

当然,简单工厂也有优点,就是在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说 ,去除了与具体产品的依赖。就像书上讲的计算器的实现,让客户端不用管该用哪个类的实例,只需要把“+”给工厂,工厂自动就给出了相应的实例,不需要知道这个具体的实例,直接做运算就可以了。

从上面两段的优缺点比较中,不难发现工厂方法模式实现时,客户端需要决定实例化哪个工厂来实现运算类,选择判断的问题还是存在的,也就是说,工厂方法把简单工厂的内部逻辑判断移到了客户端进行,你想要加功能,本来是该工厂类的,而现在是修改客户端。

四、抽象工厂模式

定义:提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。(这定义没看懂书上抄来的)

当抽象工厂只生产一种产品时,他就是一个工厂方法模式。可以说工厂方法模式是抽象多长的一个特例。这么看来只要你把工厂方法搞明白了,抽象工厂模式便是信手拈来的事情。下面我们就用一个数据库工厂来说明抽象工厂模式的一些优势和缺陷。

因为考虑到应用程序有更换数据库的需求,所有要抽象出数据库的接口IFactory,这里我们分别实现一个针对Mysql和Oracle的数据库的工厂:MysqlFactory,OracleFactory。假设数据库中有User和Department两个表。抽象出他们的接口,分别实现他们的Mysql和Oracle版本MysqlUser,OracleUser,MysqlDepartment,OracleDepartment。在IFactory有生产User和Department实例的接口。 基本的类结构就是这样的,当前的数据工厂生产两种产品,删除一种,抽象工厂模式就变成了工厂方法模式。

抽象工厂模式的优缺点:

优点:1.拿上面的列子来说,当我们需要更换数据库的时候(从Mysql换到Oracle),只需要修改一行代码:IFactory factory=new MysqlFactory();改为IFactory factory=new OracleFactory() ;是不是很容易。

2.他让具体的创建实例的过程与客户端分离,客户端是通过他们的抽象接口操纵实例,产品的具体类名也被具体工厂的实现分离,不会出现在客户代码中。

缺点:当你需要往工厂添加产品时,比如我们现在增加Project表,则至少要怎家三个类,IProject,SqlServerProject,AcessProject,还需要更改IFactory,SqlserverFactory,AccessFacroty,是不是很麻烦,这就要求我们在生产的产品确定的需求中才使用这种模式。

下面推荐一篇文章:点击,把以上三种“工厂”模式做了清晰的比较。

五、适配器模式

定义:将一个类的接口转换成客户希望的另外一个接口。此模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

通俗描述:系统的数据和行为都正确,但接口不符合时,我们应该考虑用适配器,目的是使控制范围之外的一个原有对象与某个接口匹配。适配器模式主要用于一些现存的类,但是接口又与复用环境要求不一致的情况。

适配器有两种类型:类适配器和对象适配器。

理解适配器模式一个不错的举例:有些国家用110V的电压,而我们国家用的是220V,但我们的电器,比如笔记本电脑是不能什么电压都能用的,但国家不同,电压可能不相同也是事实,于是就用一个电源适配器,只要有电,不错多少伏,都能把电源变成需要的电压,这就是适配器的做用。

适配器模式的具体实现:点击




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值