当前位置:网站首页>GoF23—工厂模式
GoF23—工厂模式
2022-06-26 06:03:00 【酷小亚】
什么是工厂模式:
工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
工厂模式的核心本质:
- 实例化对象不适用new,用工厂方法代替
- 将选择实现类,创建对象统一管理和控制。从而将调用者跟我们的实现类解耦。
三种模式:
简单工厂模式(Simple Factory)
- 用来生产统一等级结构中的
任意产品(对于增加新的产品,需要修改原有的代码,代码量虽少,维护性较差!) - 虽然某种程度上不符合设计原则,但实际上
使用最多!
工厂方法模式(Factory Method)
- 用来生产同一等级结构中的
固定产品(支持增加任意产品,代码量虽大,但维护性较好!) 横向扩展,不影响操作!
抽象工厂模式(Abstract Factory)
- 围绕一个
超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。 - 不可以增加产品,可以
增加产品族!
简单工厂模式 : (又叫静态工厂模式)

package factory.simple;
//接口
public interface Car {
void name();
}
package factory.simple;
public class DaZhong implements Car{
@Override
public void name() {
System.out.println("大众");
}
}
package factory.simple;
public class Tesla implements Car{
@Override
public void name() {
System.out.println("特斯拉");
}
}
package factory.simple;
public class WuLing implements Car{
@Override
public void name() {
System.out.println("五菱宏光!");
}
}
package factory.simple;
/**静态工厂模式(简单工厂模式) * 缺点:增加一个新的产品,如果你不修改代码,做不到! * 没有满足开闭原则 */
public class CarFactory {
//方法一
// public static Car getCar(String car){
// if (car.equals("五菱")){
// return new WuLing();
// }else if(car.equals("Tesla")){
// return new Tesla();
// }else{
// return null;
// }
// }
//方法二
public static Car getWuLing(){
return new WuLing();
}
public static Car getTesla(){
return new Tesla();
}
public static Car getDaZhong(){
return new DaZhong();
}
}
package factory.simple;
//接口的所有实现类!
public class Consumer {
public static void main(String[] args) {
//方法一
// Car car = CarFactory.getCar("五菱");
// car.name();
// CarFactory.getCar("Tesla").name();
//方法二
CarFactory.getTesla().name();
CarFactory.getWuLing().name();
CarFactory.getDaZhong().name();
}
}

工厂方法模式:

package factory.method;
public interface Car {
void name();
}
package factory.method;
//工厂方法模式
public interface CarFactory {
Car getCar();
}
package factory.method;
public class WuLing implements Car {
@Override
public void name() {
System.out.println("五菱宏光!");
}
}
package factory.method;
public class WuLingFactory implements CarFactory{
@Override
public Car getCar() {
return new WuLing();
}
}
package factory.method;
public class Tesla implements Car {
@Override
public void name() {
System.out.println("特斯拉");
}
}
package factory.method;
public class TeslaFactory implements CarFactory{
@Override
public Car getCar() {
return new Tesla();
}
}
package factory.method;
public class MoBai implements Car{
@Override
public void name() {
System.out.println("摩拜单车");
}
}
package factory.method;
public class MoBaiFactory implements CarFactory{
@Override
public Car getCar() {
return new MoBai();
}
}
package factory.method;
//接口的所有实现类!
public class Consumer {
public static void main(String[] args) {
new WuLingFactory().getCar().name();
new TeslaFactory().getCar().name();
new MoBaiFactory().getCar().name();
}
}

抽象工厂模式:
下篇文章(点击查看):GoF23—抽象工厂模式
边栏推荐
- Record how to modify the control across threads
- Transaction and message semantics
- University Information Management System
- 花生壳内网穿透映射NPM私服问题
- ByteDance starts the employee's sudden wealth plan and buys back options with a large amount of money. Some people can earn up to 175%
- Tencent's 2022 school recruitment of large factories started with salary, and the general contracting of cabbage is close to 40W!
- 从新东方直播来探究下小程序音视频通话及互动直播
- EFK升级到ClickHouse的日志存储实战
- MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications
- Mongodb——使用Mongodb对字段中字符串内容进行截取,并进行分组统计
猜你喜欢

Architecture design method

技术能力的思考和总结

Household accounting procedures (the second edition includes a cycle)

C generic speed

跨域的五种解决方案

421- binary tree (226. reversed binary tree, 101. symmetric binary tree, 104. maximum depth of binary tree, 222. number of nodes of complete binary tree)

【群内问题学期汇总】初学者的部分参考问题

Factory method pattern, abstract factory pattern

Logstash——Logstash将数据推送至Redis

Hot! 11 popular open source Devops tools in 2021!
随机推荐
技术Leader的思考技巧
Combined mode, transparent mode and secure mode
Thinking skills of technical leaders
Test depends on abstraction and does not depend on concrete
数据治理工作的几种推进套路
GoF23—建造者模式
Redis multithreading and ACL
Bubble sort
tf. nn. top_ k()
MySQL-07
Level signal and differential signal
Yamaha robot splits visual strings
How to associate wechat applet QR code to realize two code aggregation
"= =" difference from "equals"
Machine learning 05: nonlinear support vector machines
Explore small program audio and video calls and interactive live broadcast from New Oriental live broadcast
冒泡排序(Bubble Sort)
Summary of JVM interview focus (II) -- garbage collector (GC) and memory allocation strategy
Handwritten background management framework template (I)
Cython入门