工厂模式

简介: 工厂模式

什么是工厂模式
实现了创建者和调用者分离,工厂模式分为简单工厂、工厂方法等等
工厂模式好处
工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式,利用工厂模式可以降低程序的耦合性(高内聚,低耦合),为后期的维护修改提供了很大的便利,将选择实现类、创建对象统一管理和控制。从而将调用者跟我们的实现类解耦

工厂模式分类
简单工厂模式
简单工厂模式相当于是一个工厂中有各种产品,创建在一个类中,客户无需知道具体产品的名称,只需要知道产品类所对应的参数即可,但是工厂的职责过重,而且当类型过多时不利于系统的扩展维护

public interface Car {

public void run();

}
public class AoDi implements Car {

public void run() {
    System.out.println("我是奥迪汽车..");
}

}
public class JiLi implements Car {

public void run() {
    System.out.println("我是吉利汽车...");
}

}
public class CarFactory {

 public static Car createCar(String name) {
    if(name.equals("奥迪")){
        return new AoDi();
    }
    if(name.equals("吉利")){
        return new JiLi();
    }
    return null;
}

}
public class Client{

public static void main(String[] args) {
    Car aodi = CarFactory.createCar("奥迪");
    Car jili = CarFactory.createCar("吉利");
    aodi.run();
    jili.run();
}

}
单工厂的优缺点
优点:简单工厂模式能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象,明确区分了各自的职责和权力,有利于整个软件体系结构的优化
缺点:工厂类集中了所有实例的创建逻辑,工厂的职责过重,而且当类型过多时不利于系统的扩展维护
工厂方法模式
什么是工厂方法模式

工厂方法模式,又称多态性工厂模式,在工厂方法模式中,核心的工厂类不再负责所有的产品的创建,而是将具体创建的工作交给子类去做,该核心类成为一个抽象工厂角色,仅负责给出具体工厂子类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节,这样的设计也更加符合单一职责原则,不能一个工厂什么汽车都能生产,也符合程序的高内聚
public interface Car {

public void run();

}
public interface CarFactory {

public Car createCar();

}
public class AoDi implements Car {

public void run() {
    System.out.println("我是奥迪汽车..");
}

}
public class JiLi implements Car {

public void run() {
    System.out.println("我是吉利汽车...");
}

}
public class JiLiFactory implements CarFactory {

public Car createCar() {
    return new JiLi();
}

}
public class AoDiFactory implements CarFactory {

public Car createCar() {
    return new AoDi();
}

}
public class Client {

public static void main(String[] args) {
    Car aodi = new AoDiFactory().createCar();
    Car jili = new JiLiFactory().createCar();
    aodi.run();
    jili.run();
}

}

相关文章
|
搜索推荐 JavaScript Java
计算机毕业设计 图书管理系统 Vue+SpringBoot+MySQL(一)
计算机毕业设计 图书管理系统 Vue+SpringBoot+MySQL
557 2
|
开发框架 自然语言处理 前端开发
【第25期】一文读懂React企业级前端应用框架Umi
【第25期】一文读懂React企业级前端应用框架Umi
802 0
|
2月前
|
机器学习/深度学习 边缘计算 监控
【创新】【微电网多目标优化调度】五种多目标优化算法(MOJS、NSGA3、MOGWO、NSWOA、MOPSO)求解微电网多目标优化调度(Matlab代码实现)
【创新】【微电网多目标优化调度】五种多目标优化算法(MOJS、NSGA3、MOGWO、NSWOA、MOPSO)求解微电网多目标优化调度(Matlab代码实现)
225 0
|
6月前
|
搜索推荐 Android开发 开发者
Android星级评分条RatingBar样式的改变及出现问题的解决方法
本文介绍了自定义 RatingBar 的实现方法,通过布局文件、layer-list 样式文件和 style 文件的配置完成个性化星星评分效果。关键步骤包括:1) 在布局文件中添加 RatingBar 并引用样式;2) 创建 layer-list 文件定义背景、次级进度和进度图片;3) 在 style 文件中定义 RatingBar 样式并应用到布局中。可能出现的问题及解决办法:直接报错通常是图片素材过大,调整尺寸即可;星星流眼泪是图片形状问题,需将图片置于透明圆形或正方形内重新组合。附有具体代码示例,方便开发者快速上手实现自定义评分组件。
279 12
|
7月前
|
前端开发 API 开发工具
一年撸完百万行代码,企业微信的全新鸿蒙NEXT客户端架构演进之路
本文将要分享的是企业微信的鸿蒙Next客户端架构的演进过程,面对代码移植和API不稳定的挑战,提出了DataList框架解决方案。通过结构化、动态和认知三重熵减机制,将业务逻辑与UI解耦,实现数据驱动开发。采用MVDM分层架构(业务实体层、逻辑层、UI数据层、表示层),屏蔽系统差异,确保业务代码稳定。
346 0
|
数据处理 索引 Python
使用pandas的merge()和join()函数进行数据处理
使用pandas的merge()和join()函数进行数据处理
373 2
|
Web App开发 Java Python
Java selenium操作下拉滚动条的几种方法
数据采集中,经常遇到动态加载的数据,我们经常使用selenium模拟浏览器操作,需要多次下拉刷新页面才能采集到所有的数据,就此总结了几种selenium操作下拉滚动条的几种方法我这里演示的是Java版本的,使用chromedriver,当然你可以换成python或其他语言,浏览器用firefox或者phantomjs(无头浏览器),大部分都是适用的,不同浏览器有略微的差异。
8727 0
|
机器学习/深度学习 人工智能 计算机视觉
极智AI | 图像处理中对掩膜mask和ROI的理解
大家好,我是极智视界,本文介绍一下 图像处理中对掩膜 mask 和 ROI 的理解。
817 0
|
JavaScript 定位技术 容器
Vue(3). 如何将高德地图引入的vue中
Vue(3). 如何将高德地图引入的vue中
242 0
|
对象存储 存储 分布式计算
JindoFS: 云上大数据的高性能数据湖存储方案
JindoFS 是EMR打造的高性能大数据存储服务,可以为不同的计算引擎提供不同的存储服务,可以根据应用的场景来选择不同的存储模式。在2019杭州云栖大会大数据生态专场,阿里巴巴计算平台事业部EMR团队技术专家殳鑫鑫和Intel大数据团队软件开发经理徐铖共同向大家分享了云上大数据的高性能数据湖存储方案JindoFS的产生背景、架构以及与Intel DCPM的性能评测。
16848 58
JindoFS: 云上大数据的高性能数据湖存储方案