feat: 工厂模式

This commit is contained in:
裴浩宇 2023-10-17 18:20:48 +08:00
parent deabc84194
commit 208bc840bb
21 changed files with 341 additions and 39 deletions

33
.gitignore vendored Normal file
View File

@ -0,0 +1,33 @@
HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/

View File

@ -1,17 +1,12 @@
package com.pnkx.designpatterns;
import com.pnkx.designpatterns.factorymethod.AnimalFactory;
import com.pnkx.designpatterns.factorymethod.model.Animal;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DesignPatternsApplication {
public static void main(String[] args) {
// 使用工厂类创建不同的 Animal 对象
Animal dog = AnimalFactory.createAnimal("dog");
dog.sound();
Animal cat = AnimalFactory.createAnimal("cat");
cat.sound();
SpringApplication.run(DesignPatternsApplication.class, args);
}
}

View File

@ -0,0 +1,44 @@
package com.pnkx.designpatterns.abstractfactory;
import com.pnkx.designpatterns.abstractfactory.factory.LinuxFactory;
import com.pnkx.designpatterns.abstractfactory.factory.SoftwareFactory;
import com.pnkx.designpatterns.abstractfactory.factory.WindowsFactory;
import com.pnkx.designpatterns.abstractfactory.model.Application;
import com.pnkx.designpatterns.abstractfactory.model.OperatingSystem;
import com.pnkx.designpatterns.factorymethod.factory.AnimalFactory;
import com.pnkx.designpatterns.factorymethod.factory.CatFactory;
import com.pnkx.designpatterns.factorymethod.factory.DogFactory;
import com.pnkx.designpatterns.factorymethod.model.Animal;
/**
* Main
*
* @author 裴浩宇
* @version 1.0
* @date 2023/10/17 17:52
* @description 抽象工厂模式客户端
*/
public class Main {
public static void main(String[] args) {
// 初始化Windows工厂
SoftwareFactory windowsFactory = new WindowsFactory();
// 初始化操作系统
OperatingSystem windowsOS = windowsFactory.createOperatingSystem();
// 启动
windowsOS.run();
// 初始化应用程序
Application wechat = windowsFactory.openApplication();
// 打开
wechat.open();
// 初始化Linux操作系统
SoftwareFactory linuxFactory = new LinuxFactory();
// 初始化操作系统
OperatingSystem linuxOS = linuxFactory.createOperatingSystem();
// 启动
linuxOS.run();
// 初始化应用程序
Application vim = linuxFactory.openApplication();
// 打开
vim.open();
}
}

View File

@ -0,0 +1,25 @@
package com.pnkx.designpatterns.abstractfactory.factory;
import com.pnkx.designpatterns.abstractfactory.model.Application;
import com.pnkx.designpatterns.abstractfactory.model.LinuxOS;
import com.pnkx.designpatterns.abstractfactory.model.OperatingSystem;
import com.pnkx.designpatterns.abstractfactory.model.Vim;
/**
* LinuxFactory
*
* @author 裴浩宇
* @version 1.0
* @date 2023/10/17 17:50
* @description 具体工厂Linux工厂
*/
public class LinuxFactory implements SoftwareFactory {
@Override
public OperatingSystem createOperatingSystem() {
return new LinuxOS();
}
@Override
public Application openApplication() {
return new Vim();
}
}

View File

@ -0,0 +1,26 @@
package com.pnkx.designpatterns.abstractfactory.factory;
import com.pnkx.designpatterns.abstractfactory.model.Application;
import com.pnkx.designpatterns.abstractfactory.model.OperatingSystem;
/**
* SoftwareFactory
*
* @author 裴浩宇
* @version 1.0
* @date 2023/10/17 17:47
* @description 抽象工厂接口
*/
public interface SoftwareFactory {
/**
* 创建操作系统
* @return 操作系统
*/
OperatingSystem createOperatingSystem();
/**
* 打开程序
* @return 程序
*/
Application openApplication();
}

View File

@ -0,0 +1,26 @@
package com.pnkx.designpatterns.abstractfactory.factory;
import com.pnkx.designpatterns.abstractfactory.model.Application;
import com.pnkx.designpatterns.abstractfactory.model.OperatingSystem;
import com.pnkx.designpatterns.abstractfactory.model.WeChat;
import com.pnkx.designpatterns.abstractfactory.model.WindowsOS;
/**
* WindowsFactory
*
* @author 裴浩宇
* @version 1.0
* @date 2023/10/17 17:49
* @description 具体工厂Windows工厂
*/
public class WindowsFactory implements SoftwareFactory {
@Override
public OperatingSystem createOperatingSystem() {
return new WindowsOS();
}
@Override
public Application openApplication() {
return new WeChat();
}
}

View File

@ -0,0 +1,16 @@
package com.pnkx.designpatterns.abstractfactory.model;
/**
* Application
*
* @author 裴浩宇
* @version 1.0
* @date 2023/10/17 17:41
* @description 抽象产品接口应用程序
*/
public interface Application {
/**
* 打开
*/
void open();
}

View File

@ -0,0 +1,16 @@
package com.pnkx.designpatterns.abstractfactory.model;
/**
* LinuxOS
*
* @author 裴浩宇
* @version 1.0
* @date 2023/10/17 17:40
* @description 具体产品Linux操作系统
*/
public class LinuxOS implements OperatingSystem {
@Override
public void run() {
System.out.println("Linux系统启动~");
}
}

View File

@ -0,0 +1,16 @@
package com.pnkx.designpatterns.abstractfactory.model;
/**
* OperatingSystem
*
* @author 裴浩宇
* @version 1.0
* @date 2023/10/17 17:39
* @description 抽象产品接口操作系统
*/
public interface OperatingSystem {
/**
* 启动
*/
void run();
}

View File

@ -0,0 +1,16 @@
package com.pnkx.designpatterns.abstractfactory.model;
/**
* Vim
*
* @author 裴浩宇
* @version 1.0
* @date 2023/10/17 17:45
* @description 具体产品Vim
*/
public class Vim implements Application {
@Override
public void open() {
System.out.println("打开Vim~");
}
}

View File

@ -0,0 +1,16 @@
package com.pnkx.designpatterns.abstractfactory.model;
/**
* WeChat
*
* @author 裴浩宇
* @version 1.0
* @date 2023/10/17 17:44
* @description 具体产品微信
*/
public class WeChat implements Application {
@Override
public void open() {
System.out.println("打开微信~");
}
}

View File

@ -0,0 +1,17 @@
package com.pnkx.designpatterns.abstractfactory.model;
/**
* WindowsOS
*
* @author 裴浩宇
* @version 1.0
* @date 2023/10/17 17:39
* @description 具体产品Window操作系统
*/
public class WindowsOS implements OperatingSystem {
@Override
public void run() {
System.out.println("Windows系统启动~");
}
}

View File

@ -1,26 +0,0 @@
package com.pnkx.designpatterns.factorymethod;
import com.pnkx.designpatterns.factorymethod.model.Animal;
import com.pnkx.designpatterns.factorymethod.model.Cat;
import com.pnkx.designpatterns.factorymethod.model.Dog;
/**
* AnimalFactory
*
* @author 裴浩宇
* @version 1.0
* @date 2023/10/17 13:58
* @description 动物工厂类
*/
public class AnimalFactory {
// 根据传入的参数创建具体的动物类对象
public static Animal createAnimal(String type) {
if (type.equalsIgnoreCase("dog")) {
return new Dog();
} else if (type.equalsIgnoreCase("cat")) {
return new Cat();
} else {
throw new IllegalArgumentException("Invalid animal type: " + type);
}
}
}

View File

@ -0,0 +1,27 @@
package com.pnkx.designpatterns.factorymethod;
import com.pnkx.designpatterns.factorymethod.factory.AnimalFactory;
import com.pnkx.designpatterns.factorymethod.factory.CatFactory;
import com.pnkx.designpatterns.factorymethod.factory.DogFactory;
import com.pnkx.designpatterns.factorymethod.model.Animal;
/**
* Main
*
* @author 裴浩宇
* @version 1.0
* @date 2023/10/17 17:52
* @description 工厂方法模式客户端
*/
public class Main {
public static void main(String[] args) {
// 初始化猫咪工厂
AnimalFactory catFactory = new CatFactory();
Animal cat = catFactory.createAnimal();
cat.sound();
// 初始化小狗工厂
AnimalFactory dogFactory = new DogFactory();
Animal dog = dogFactory.createAnimal();
dog.sound();
}
}

View File

@ -0,0 +1,16 @@
package com.pnkx.designpatterns.factorymethod.factory;
import com.pnkx.designpatterns.factorymethod.model.Animal;
/**
* AnimalFactory
*
* @author 裴浩宇
* @version 1.0
* @date 2023/10/17 13:58
* @description 动物工厂抽象类
*/
public abstract class AnimalFactory {
// 创建动物类对象
public abstract Animal createAnimal();
}

View File

@ -0,0 +1,19 @@
package com.pnkx.designpatterns.factorymethod.factory;
import com.pnkx.designpatterns.factorymethod.model.Animal;
import com.pnkx.designpatterns.factorymethod.model.Cat;
/**
* CatFactory
*
* @author 裴浩宇
* @version 1.0
* @date 2023/10/17 16:22
* @description 猫咪工厂
*/
public class CatFactory extends AnimalFactory {
@Override
public Animal createAnimal() {
return new Cat();
}
}

View File

@ -0,0 +1,19 @@
package com.pnkx.designpatterns.factorymethod.factory;
import com.pnkx.designpatterns.factorymethod.model.Animal;
import com.pnkx.designpatterns.factorymethod.model.Dog;
/**
* DogFactory
*
* @author 裴浩宇
* @version 1.0
* @date 2023/10/17 16:23
* @description 小狗工厂
*/
public class DogFactory extends AnimalFactory{
@Override
public Animal createAnimal() {
return new Dog();
}
}

View File

@ -8,7 +8,7 @@ package com.pnkx.designpatterns.factorymethod.model;
* @date 2023/10/17 13:57
* @description 动物抽象类
*/
public abstract class Animal {
// 声音
public abstract void sound();
public interface Animal {
//
public void sound();
}

View File

@ -8,7 +8,7 @@ package com.pnkx.designpatterns.factorymethod.model;
* @date 2023/10/17 13:57
* @description 猫咪类
*/
public class Cat extends Animal {
public class Cat implements Animal {
@Override
public void sound() {
System.out.println("喵喵喵");

View File

@ -6,9 +6,9 @@ package com.pnkx.designpatterns.factorymethod.model;
* @author 裴浩宇
* @version 1.0
* @date 2023/10/17 13:58
* @description 描述
* @description 小狗类
*/
public class Dog extends Animal {
public class Dog implements Animal {
@Override
public void sound() {
System.out.println("汪汪汪");

View File

@ -0,0 +1 @@