工厂方法模式:延迟到子类来选择实现-阿里云开发者社区

开发者社区> 5abyqn7wigzqm> 正文

工厂方法模式:延迟到子类来选择实现

简介: 工厂方法模式的本质是延迟到子类来选择实现;其体现了依赖倒置原则。
+关注继续查看

框架与设计模式

    框架是什么:框架是能完成一定功能的半成品软件。
    框架做什么:框架能够完成一定功能,加速应用开发速度;可提供一个精良的程序架构。
    框架与应用程序的关系:谁来做和做什么?框架完成一部分功能,应用开发人员完成一部分功能。
    比如在一个大的应用系统中,应用开发只需要关注业务实现即可,应用框架可能实现的功能有:
    (1)统一响应返回报文,规范报文格式内容;
    (2)基类定义,通用字段约定;
    (3)统一异常处理机制;
    (4)提供公共API使用,工具类开发;
    (5)提供第三方组件封装使用,如:hadoop、hbase、kafka、mybitas、redis等;
    应用程序:只需关注业务流程功能实现。接口开发、用户体验交互等。

框架与设计模式的比较:

    (1)设计模式比框架更抽象:框架是一个已经实现了的半成品软件;设计模式在于解决的问题的方案和思想上。
    (2)设计模式是 比框架更小的体系结构元素:框架是已实现了的软件,而一个框架可包含多种设计模式的应用。
    (3)框架比设计模式更特例化:框架是针对特定领域的,解决的是某个领域内的问题,每个领域的框架都是不一样的;设计模式注重从思想上、方法上解决问题,不局限于某个领域,更加通用化。

定义及本质
定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。
本质:延迟到子类来选择实现。
结构示意图:
image.png
工厂方法详解
(1)工厂方法的功能,是让主类在不知道具体实现的情况下,完成自身功能的调用;而将具体的实现延迟到子类实现。
(2)工厂方法的实现,通常父类是一个抽象类,抽象类中包含创建对象的抽象方法,这些抽象方法就是工厂方法。
(3)工厂方法的返回,一般是被创建对象的接口对象,一个抽象类或一个类的实例。
(4)工厂方法一般不提供给外部(客户端)调用,其所创建的对象一般也不提供给外部使用,主要由创建器类内部的方法来使用工厂方法创建对象。
(5)可以把父类由抽象类实现成为一个具体的类。

依赖倒置原则

   依赖:要依赖抽象类,不要依赖于具体类。
   倒置:也就是接口的所有权问题,低层实现的接口所有权不在低层组件手中,而是倒置到高层组件了。接口中的功能就是高层组件需要的功能,高层组件提出要求,由低层组件实现高层组件所要求的接口功能。

image.png

UML类图
image.png

调用时序图
image.png

优缺点
优点:
(1)无须知道具体实现:具体实现由子类完成。
(2)容易扩展新的对象:通过工厂方法给子类的挂钩(钩子方法hook),子类提供工厂方法的实现,即可使用该子类。
(3)连接平行的类层次:使层次更易扩展和复用。
缺点:
具体产品对象和工厂方法耦合:工厂方法创建对象时,需要选择具体实现的对象,这个对象和工厂方法耦合性。

应用场景及代码实现

// 1 客户端调用类
public class Client {
     public static void main(String[] args) {
           AbstractCreator creatorA = new AConcreteCreator();
           creatorA.operation();
           AbstractCreator creatorB = new BConcreteCreator();
           creatorB.operation();
     }
}
// 2 创建器:声明工厂方法
public abstract class AbstractCreator {
     // 2.1 声明工厂方法,由子类实现,实例化业务接口对象
     protected abstract Api factoryApi();
     // 2.2 具体业务功能实现方法
     public void operation(){
           // 2.3 AbstractCreator需要Api对象,不再主动创建业务实现类,交给子类的factoryApi()去实现(IOC/DI)
           Api api = factoryApi();
           api.operation();
     }
}
// 3.1 具体创建器对象类A,继承创建器类
public class AConcreteCreator extends AbstractCreator{
     @Override
     protected Api factoryApi() {
           // 3.1.1 真正的选择业务实现类,并创建对象(IOC/DI)
           return new AApiImpl();
     }
}
// 3.2 具体创建器对象类B,继承创建器类
public class BConcreteCreator extends AbstractCreator{
     @Override
     protected Api factoryApi() {
           return new BApiImpl();
     }
}
// 4 业务接口类
public interface Api {
     public void operation();
}
// 5.1 业务接口实现类A
public class AApiImpl implements Api {
     @Override
     public void operation() {
           System.out.println("AApiImpl do...");
     }
}
// 5.2 业务接口实现类B
public class BApiImpl implements Api {
     @Override
     public void operation() {
           System.out.println("BApiImpl do...");
     }
}

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
9591 0
使用SSH远程登录阿里云ECS服务器
远程连接服务器以及配置环境
2465 0
windows server 2008阿里云ECS服务器安全设置
最近我们Sinesafe安全公司在为客户使用阿里云ecs服务器做安全的过程中,发现服务器基础安全性都没有做。为了为站长们提供更加有效的安全基础解决方案,我们Sinesafe将对阿里云服务器win2008 系统进行基础安全部署实战过程! 比较重要的几部分 1.
9079 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13300 0
阿里云服务器ECS登录用户名是什么?系统不同默认账号也不同
阿里云服务器Windows系统默认用户名administrator,Linux镜像服务器用户名root
4108 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,云吞铺子总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系统盘、创建快照、配置安全组等操作如何登录ECS云服务器控制台? 1、先登录到阿里云ECS服务器控制台 2、点击顶部的“控制台” 3、通过左侧栏,切换到“云服务器ECS”即可,如下图所示 通过ECS控制台的远程连接来登录到云服务器 阿里云ECS云服务器自带远程连接功能,使用该功能可以登录到云服务器,简单且方便,如下图:点击“远程连接”,第一次连接会自动生成6位数字密码,输入密码即可登录到云服务器上。
22016 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
7016 0
34
文章
1479
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载