目录
-
- 五大设计模式
- 一、单例模式
- 二、工厂模式(简单工厂、工厂模式、抽象工厂)
- 三、适配器模式
- 四、模板模式
- 有公共函数,该如何设计/li>
- 如果我不想加任何添加,怎么办/li>
- 五、(代理、门面)
五大设计模式
最关键的软件开发工具是受过良好设计原则训练的思维
一、单例模式
Singleton类定义一个个getInstance()操作,允许客户端访问他的唯一实例,getInstance()是一个静态的方法,主要创建自己的一个唯一实例。
比如我们希望整个应用程序只有一个连接数据库connection实例。
又比如要求一个应用程序中只存在某个用户数据结构的唯一结构。
某个类只有一个实例,具体的代码实现:
二、工厂模式(简单工厂、工厂模式、抽象工厂)
所有的产品和产品接口组成一个产品群,这个就是“简单工厂”,只有一个工厂。
工厂和产品最好在一个包里,产品类就可以不是public的,这样只有工厂才可以访问产品,其他不在这个包里就无法直接访问这些产品,起到屏蔽产品类的作用。
可以看着下面的代码来理解一下简单工厂模式具体代码说明
这样做的优点:我们可以对创建的对象进行一些 “加工” ,而且客户端并不知道,因为工厂隐藏了这些细节。如果,没有工厂的话,那我们是不是就得自己在客户端上写这些代码,这就好比本来可以在工厂里生产的东西,拿来自己手工制作,不仅麻烦以后还不好维护。
但是缺点也很明显:如果需要在方法里写很多与对象创建有关的业务代码,而且需要的创建的对象还不少的话,我们要在这个简单工厂类里编写很多个方法,每个方法里都得写很多相应的业务代码,而每次增加子类或者删除子类对象的创建都需要打开这简单工厂类来进行修改。这会导致这个简单工厂类很庞大臃肿、耦合性高,而且增加、删除某个子类对象的创建都需要打开简单工厂类来进行修改代码也违反了开-闭原则。
式
这时候就需要工厂模式了
工厂模式实现如下
1.首先,先定义一个工厂接口
2.然后是具体的工厂类
3.工厂接口与产品的内容与简单一样
4.客户端
工厂模式中,要增加产品类时也要相应地增加工厂类,客户端的代码也增加了不少。工厂方法把简单工厂的内部逻辑判断转移到了客户端代码来进行。
你想要加功能,本来是改工厂类的,而现在是修改客户端。而且各个不同功能的实例对象的创建代码,也没有耦合在同一个工厂类里,这也是工厂方法模式对简单工厂模式解耦的一个体现。工厂方法模式克服了简单工厂会违背开-闭原则的缺点,又保持了封装对象创建过程的优点。
但工厂方法模式的缺点是每增加一个产品类,就需要增加一个对应的工厂类,增加了额外的开发量。
有兴趣的可以参考这个文件深入了解简单工厂模式,工厂模式以及抽象工厂模式(具体)
三、适配器模式
适配器模式主要应用于希望复用一些现存的类,但是接口又与复用环境要求不一致的情况。当希望复用的类接口不对时,采用适配器使控制之外的一个原有对象与某个接口匹配。
代码实现
//客户端:public class XYZ { public void work() { Target tag = new RealizeClass(); tag.Request(); }}//服务接口:public interface Target { public void Request();}// 客户端想要的服务:public class Service { public void SpecificRequest() //但是接口不匹配 { //具体操作方法 }}//重写服务端实现类,作为适配器,代码为:public class RealizeClass implements Target{ private Service service; public void Request() { service = new Service(); service.SpecificRequest(); //进行适配
来源:Branlen
声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!