博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaEE Design Patter(2)
阅读量:5134 次
发布时间:2019-06-13

本文共 1738 字,大约阅读时间需要 5 分钟。

一、Factory

工厂模式:主要分为三种模式:

定义:在基类中定义创建对象的一个接口,让子类决定实例化哪个类。工厂方法让一个类的实例化延迟到子类中进行。

为什么要使用工厂模式:

(1) 解耦 :把对象的创建和使用的过程分开

(2)降低代码重复: 如果创建某个对象的过程都很复杂,需要一定的代码量,而且很多地方都要用到,那么就会有很多的重复代码。
(3) 降低维护成本 :由于创建过程都由工厂统一管理,所以发生业务逻辑变化,不需要找到所有需要创建对象B的地方去逐个修正,只需要在工厂里修改即可,降低维护成本。

1 简单工厂模式:

在实际的开发当中较少使用,主要在于违背了我们的开放-封闭原则,主要适用于创建对象较少,客户端不关心对象的创建过程方面。

主要的角色分配如下:

工厂(Factory)角色 :简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。

抽象产品(Product)角色 :简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。

具体产品(Concrete Product)角色:简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。在这里不做赘述。

2 工厂方法模式

定义: 工厂方法模式,又称工厂模式、多态工厂模式和虚拟构造器模式,通过定义工厂父类负责定义创建对象的公共接口,而子类则负责生成具体的对象。

主要使用的工厂模式步骤如下:

1 创建抽象工厂类,定义具体工厂的公共接口

2  创建抽象产品类定义,具体产品的公共接口

3 创建具体产品类(继承抽象产品类) & 定义生产的具体产品;

4 创建具体工厂类(继承抽象工厂类),定义创建对应具体产品实例的方法;

5 最后,外界通过调用具体的工厂类的不同方法,从而创建不同的具体产品类的实例。

工厂方法模式的优点:符合开闭原则,符合单一职责原则。可以形成基于继承的等级结构。

3 抽象工厂模式:

定义:抽象工厂模式,即Abstract Factory Pattern,提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类;具体的工厂负责实现具体的产品实例。(抽象工厂模式与工厂方法模式最大的区别:抽象工厂中每个工厂可以创建多种类的产品;而工厂方法每个工厂只能创建一类。)

1 创建
抽象工厂类,定义具体工厂的公共接口
2 创建
抽象产品族类 ,定义抽象产品的公共接口
3 创建
抽象产品类 (继承抽象产品族类),定义具体产品的公共接口
4 创建
具体产品类(继承抽象产品类) & 定义生产的具体产品
5创建
具体工厂类(继承抽象工厂类),定义创建对应具体产品实例的方法
6 客户端通过实例化具体的工厂类,并调用其创建不同目标产品的方法创建不同具体产品类的实例
抽象工厂模式的优点:降低耦合。更符合开闭原则,符合单一职责原则,不使用静态工厂方法,可以形成基于继承的等级结构。

二、代理模式

定义:给目标对象提供一个代理对象,并由代理对象控制对目标对象的引用。通过引入代理对象的方式来间接访问目标对象

模式原理图:

1 创建抽象对象接口(Subject):声明你真实对象需要让代理对象做的方法

2 创建真实对象类

3 创建代理对象类(Proxy),并通过代理类创建真实对象实例并访问其方法

4 客户端调用

实现优点:

1 协调调用者和被调用者,降低了系统的耦合度

2 代理对象作为客户端和目标对象之间的中介,起到了保护目标对象的作用

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

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

就是在AbstractCalculator类中定义一个主方法calculate,calculate()调用spilt()等,Plus和Minus分别继承AbstractCalculator类,通过对AbstractCalculator的调用实现对子类的调用.

 

转载于:https://www.cnblogs.com/wudidd/p/10707077.html

你可能感兴趣的文章
Dijkstra算法(三)之 Java详解
查看>>
C#中的Unsafe和Fixed
查看>>
java时间格式转换
查看>>
C++中this指针的用法详解
查看>>
POJ 2492 A Bug's Life
查看>>
MySQL 查询语句中自己定义的中文内容在Java Web 中显示为问号
查看>>
【转】ZooKeeper学习第二期--Zookeeper命令操作
查看>>
JACK——BOM Exercise1
查看>>
linux内核分析 第7章读书笔记——《深入理解计算机系统》
查看>>
Codeforces 576D. Flights for Regular Customers(倍增floyd+bitset)
查看>>
字符串操作
查看>>
项目中报错Cannot read property 'getAttribute' of undefined解决
查看>>
jQuery插件之ajaxFileUpload使用小结
查看>>
JAVA H5微信分享
查看>>
SDN第六次作业
查看>>
java--面对对象之构造方法
查看>>
Rime中州韵导入极点五笔词库(附:自制词库)
查看>>
反射之取类中类的属性、变量名称及其值
查看>>
JUC包中多线程之读写锁
查看>>
kafka官方的kafka-server-start.sh不能关闭kafka进程解决办法
查看>>