设计模式之工厂三姐妹① 简单工厂与工厂模式系列博客
【摘要】
前言: 23个设计模式分为三大类分别是 :创建型,行为型,结构型。 工厂三姐妹属于创建型,从结构的难易上分为 。 简单工厂→工厂方法 →抽象工厂
目录
设计模式场景简单工厂代码结果类图
工厂...
前言:
23个设计模式分为三大类分别是 :创建型,行为型,结构型。
工厂三姐妹属于创建型,从结构的难易上分为 。
简单工厂→工厂方法 →抽象工厂
设计模式场景
根据用户的选择创建对应品牌的汽车实例
简单工厂
代码
结构:
代码:
car 接口
package com.kuang.factory.simple;
/**
* @author 康世行
* @Title:
* @Package com.kuang.factory.simple
* @Description: 汽车接口
* @date 2021-12-17 9:54
*/
public interface Car {
/**
* @Description: 汽车名字
* @param ${tags}
* @return ${return_type}
* @throws
* @author 康世行
* @date 2021-12-17 9:54
*/
void name(String name);
}
car 具体实现类
```java
package com.kuang.factory.simple;
/**
* @author 康世行
* @Title:
* @Package com.kuang.factory.simple
* @Description: 特斯拉
* @date 2021-12-17 9:57
*/
public class Tesla implements Car{
@Override
public void name(String name) {
System.out.println("汽车名字"+name);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
package com.kuang.factory.simple;
/**
* @author 康世行
* @Title:
* @Package com.kuang.factory.simple
* @Description: 五菱宏光
* @date 2021-12-17 9:57
*/
public class WuLing implements Car{
@Override
public void name(String name) {
System.out.println("汽车品牌"+name);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
CarFactory 工厂
```java
package com.kuang.factory.simple;
/**
* @author 康世行
* @Title:
* @Package com.kuang.factory.simple
* @Description: 简单工厂
* @date 2021-12-17 10:02
*/
public class CarFactory {
/**
* @Description: 根据类型实例不同的对象
* @param ${tags}
* @return ${return_type}
* @throws
* @author 康世行
* @date 2021-12-17 10:03
*/
public static Car createCar(String carType){
Car car=null;
//使用switch语句进行选择类型
switch (carType){
case "五菱":
car=new WuLing();
break;
case "特斯拉":
car=new Tesla();
break;
}
return car;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
客户端
package com.kuang.factory.simple;
/**
* @author 康世行
* @Title:
* @Package com.kuang.factory.simple
* @Description: 消费者
* @date 2021-12-17 9:59
*/
public class Consumer {
public static void main(String[] args) {
//使用简单工厂
Car wuling = CarFactory.createCar("五菱");
wuling.name("五菱");
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
结果
类图
工厂方法
代码
结构:
代码:
car 接口
package com.kuang.factory.method;
/**
* @author 康世行
* @Title:
* @Package com.kuang.factory.simple
* @Description: 汽车接口
* @date 2021-12-17 9:54
*/
public interface Car {
/**
* @Description: 汽车名字
* @param ${tags}
* @return ${return_type}
* @throws
* @author 康世行
* @date 2021-12-17 9:54
*/
void name(String name);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
具体汽车品牌实现
package com.kuang.factory.method;
/**
* @author 康世行
* @Title:
* @Package com.kuang.factory.simple
* @Description: 特斯拉
* @date 2021-12-17 9:57
*/
public class Tesla implements Car {
@Override
public void name(String name) {
System.out.println("汽车名字"+name);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
package com.kuang.factory.method;
/**
* @author 康世行
* @Title:
* @Package com.kuang.factory.simple
* @Description: 五菱宏光
* @date 2021-12-17 9:57
*/
public class WuLing implements Car {
@Override
public void name(String name) {
System.out.println("汽车品牌"+name);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
carFactory工厂接口
package com.kuang.factory.method;
/**
* @author 康世行
* @Title:
* @Package com.kuang.factory.method
* @Description: 汽车工厂
* @date 2021-12-17 11:05
*/
public interface CarFactory {
/**
* @Description: 获取汽车
* @param ${tags}
* @return ${return_type}
* @throws
* @author 康世行
* @date 2021-12-17 11:06
*/
public Car getCar(String name);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
具体工厂实现
package com.kuang.factory.method;
/**
* @author 康世行
* @Title:
* @Package com.kuang.factory.method
* @Description: 五菱宏观工厂
* @date 2021-12-17 11:10
*/
public class WuLingFactory implements CarFactory{
@Override
public Car getCar(String name) {
System.out.println(name+"工厂");
return new WuLing();
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
package com.kuang.factory.method;
/**
* @author 康世行
* @Title:
* @Package com.kuang.factory.method
* @Description: 特斯拉工厂
* @date 2021-12-17 11:12
*/
public class TeslaFactory implements CarFactory{
@Override
public Car getCar(String name) {
System.out.println(name+"工厂");
return new Tesla();
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
客户端
package com.kuang.factory.method;
import com.kuang.factory.simple.CarFactory;
/**
* @author 康世行
* @Title:
* @Package com.kuang.factory.simple
* @Description: 消费者
* @date 2021-12-17 9:59
*/
public class Consumer {
public static void main(String[] args) {
Car car1 = new WuLingFactory().getCar("五菱宏观");
car1.name("五菱宏光");
Car car2 = new TeslaFactory().getCar("特斯拉");
car2.name("特斯拉");
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
结果
类图
思考:
一,简单工厂为什么不是一个设计模式
二,工厂方法模式的缺点
感谢阅读,支持下小编一键三连。小编下篇博客给出小编对于这两个思考的思考
文章来源: kangshihang.blog.csdn.net,作者:康世行,版权归原作者所有,如需转载,请联系作者。
原文链接:kangshihang.blog.csdn.net/article/details/122015866
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)