首页 > 其他分享 >一个实例用全创建型模式

一个实例用全创建型模式

时间:2025-01-14 13:33:53浏览次数:3  
标签:IOperation exe 创建 void class 用全 实例 new public

  

 目录《一个实例讲完23种设计模式》

当前:单件+抽象工厂+创建者+工厂方法

需求:坦克大战

创建两种坦克

坦克类型射程速度
b7070米时/70公里
b5050米时/50公里

设计说明

1.抽象工厂(AbstractFActory)承担了创建部件的任务

2.创建者(IBuilder)承担了讲部件组装的任务

3.工厂方法(IFactory)类相当于创建者模式的导演,但是他是并未给用户提供选择创建者的接口。

而是通过自己的多态来实现加载不同的创建者。

类图

代码

//-------功能类-------------------
//功能基类
class Function{
	public String mOperation;
	public void exe(int type) {
		System.out.println(mOperation+type);
	}
};
//射击类
class ShotFun extends Function{
	static ShotFun mFunction = new ShotFun();
	static ShotFun get() {
		return mFunction;
	}
	public ShotFun() {
		mOperation = "射击:";
	}
}
//行走类
class RunFun extends Function{
	static RunFun mFunction = new RunFun();
	static RunFun get() {
		return mFunction;
	}
	public RunFun() {
		mOperation = "跑:";
	}
}
//====== interface 接口和抽象类 ========================
interface ITank{
	void shot();
	void run();
	void setmShot(IOperation mShot);
	void setmRun(IOperation mRun);
}
interface IOperation{
	void exe();
}
interface IAbstractFactory{
	IOperation createShot();
	IOperation createRun();
}
interface IBuilder{
    //给坦克安装发射功能
	void createShout(ITank t);
    //给坦克安装行走
	void createRun(ITank t);
}
interface IFactory{
	ITank createTank();
}
//====== 实装类如下 ========================
//------功能类-----------------------------
//70的发射功能
class Shot70 implements IOperation{
	public void exe() {
		ShotFun.get().exe(70);
	}
}
//70的行走功能
class Run70 implements IOperation{
	public void exe() {
		RunFun.get().exe(70);
	}
}
//50的发射功能
class Shot50 implements IOperation{
	public void exe() {
		ShotFun.get().exe(50);
	}
}
//50的行走功能
class Run50 implements IOperation{
	public void exe() {
		RunFun.get().exe(50);
	}
}
class Tank implements ITank{
	IOperation mShot;
	IOperation mRun;
	int mSubType;
	public void setmSubType(int mSubType) {
		this.mSubType = mSubType;
	}
	public void setmShot(IOperation mShot) {
		this.mShot = mShot;
	}
	public void setmRun(IOperation mRun) {
		this.mRun = mRun;
	}
	public void shot() {
		mShot.exe();
	}
	public void run() {
		mRun.exe();
	}
}
//---------抽象工------------------------------------------
//抽象工厂-70
class AbstractFactory70 implements IAbstractFactory{
	public IOperation createShot() {
		return new Shot70();
	}
	public IOperation createRun() {
		return new Run70();
	}
}
//抽象工厂-50
class AbstractFactory50 implements IAbstractFactory{
	public IOperation createShot() {
		return new Shot50();
	}
	public IOperation createRun() {
		return new Run50();
	}
}
//---------------创建者-----------------------------------
//创建者
abstract class Builder implements IBuilder{
	IAbstractFactory mIAbstractFactory;
	public void createShout(ITank t) {
		t.setmShot(mIAbstractFactory.createShot());
	}
	public void createRun(ITank t) {
		t.setmRun(mIAbstractFactory.createRun());
	}
}
//创建者-70
class Builder70 extends Builder{
	public Builder70() {
		mIAbstractFactory = new AbstractFactory70();
	}
}
//创建者-50
class Builder50 extends Builder{
	public Builder50() {
		mIAbstractFactory = new AbstractFactory50();
	}
}
//----------工厂方法------------------------------------------
//工厂方法
abstract class Factory implements IFactory{
	IBuilder mBuilder;
	public ITank createTank() {
		ITank t = new Tank();
		mBuilder.createRun(t);
		mBuilder.createShout(t);
		return t;
	}
}
//工厂方法-70
class Factory70 extends Factory{
	public Factory70() {
		mBuilder = new Builder70();
	}	
}
//工厂方法-50
class Factory50 extends Factory{
	public Factory50() {
		mBuilder = new Builder50();
	}
}
//主程序入口
public class Client {
	public static void main(String[] args) {
		System.out.println("hello worldff !");
		Factory70 f7 = new Factory70();
		ITank t = f7.createTank();
		t.shot();
		t.run();
	}
}

运行结果

下一篇:一个实例用全创建型模式-优化(冗余消除)-CSDN博客

标签:IOperation,exe,创建,void,class,用全,实例,new,public
From: https://blog.csdn.net/xie__jin__cheng/article/details/145108030

相关文章

  • 第2.0章 PCL点云滤波方法原理及代码实例最全总结
    以下是对PCL(PointCloudLibrary)中各种滤波方法的总结,包括原理、所需头文件、机器人SLAM中的代码应用实例及使用说明:一、体素网格滤波(VoxelGridFilter)原理:体素网格滤波将三维空间划分为一个个小的立方体,即体素(Voxel)。对于每个体素,根据用户设定的体素尺寸,通过某种策......
  • 15个Linux Grep命令使用实例(实用、常用)
    Grep命令主要用于从文件中查找指定的字符串。首先建一个demo_file:复制代码代码如下:$catdemo_fileTHISLINEISTHE1STUPPERCASELINEINTHISFILE.thislineisthe1stlowercaselineinthisfile.ThisLineHasAllItsFirstCharacterOfTheWordWithUpper......
  • 创建设备组
    创建设备组调试工具接口应在服务器端调用,详细说明参见服务端API。接口说明接口英文名createIotGroupId功能描述本接口用于创建设备组,便于用户一次性订阅多个设备调用方式HTTPS调用POSThttps://api.weixin.qq.com/wxa/business/group/createid?access_token=ACCESS_......
  • 如何使用 Java 的 Spring Boot 创建一个 RESTful API?
    大家好,我是V哥,使用Java的SpringBoot创建RESTfulAPI可以满足多种开发场景,它提供了快速开发、易于配置、可扩展、可维护的优点,尤其适合现代软件开发的需求,帮助你快速构建出高性能的后端服务。例如,在企业级应用中,通常需要开发大量的业务功能,并且要求系统具有可扩展......
  • JS宏实例:拆分工作表
    一、确定拆分条件这里,以昨日合并后的数据为例。将其逆向操作,也就是按照班级将上一期的结果表进行拆分,并储存到新的工作簿中。数据源如下图所示:二、逻辑构思明确任务目的后,我们就能根据以往所学的知识构思实现方法。首先,我们需要获取数据源中的数据。可以利用Workbooks.Open......
  • 比特c语言-创建技术博客
      创建技术博客一、C语言学习目标(一)基础语法掌握熟练掌握C语言的数据类型,包括整型、浮点型、字符型等,清楚不同数据类型的取值范围和使用场景。精通各种运算符,如算术运算符、关系运算符、逻辑运算符等,能够运用它们进行正确的表达式求值。理解并能灵活运用控制结构,像i......
  • AccessData FTK Imager 是一款由 AccessData 公司开发的数字取证工具,用于创建计算机系
    AccessDataFTKImager是一款由AccessData公司开发的数字取证工具,用于创建计算机系统和存储设备的完整数据镜像,并且支持从中提取和分析数据。它是一款非常流行的取证软件,尤其在计算机取证、数据恢复和法律领域应用广泛。FTKImager的主要功能:创建数据镜像:FTKImager可以......
  • 【AI中数学-线代-综合实例-包括python实现】 聚焦注意力:解析GPT等大模型中的注意力机
    第三章线性代数--综合实例第11节聚焦注意力:解析GPT等大模型中的注意力机制在人工智能的众多技术中,注意力机制(AttentionMechanism)无疑是推动大规模模型如GPT(GenerativePre-trainedTransformer)取得突破性进展的关键因素之一。本节将通过五个实际应用案例,深入解析注意力机......
  • JS宏实例:合并多个工作簿中的数据
    一、分析数据结构首先将要合并的工作簿放在同一个文件夹下面,方便操作。如下图所示:打开每个工作簿,查看数据结构。这里UP只做一个简单的示例,所以每个表的数据结构是完全相同的。如下图所示:明确数据结构之后,我们就可以梳理逻辑,考虑如何去实现这一功能。二、逻辑梳理1、打......
  • 命令行创建 uni-app 项目
    VSCode对TS类型支持友好,前端开发者主流的编辑器HbuilderX对TS类型支持暂不完善,期待官方完善gitclone-bvite-tshttps://gitee.com/dcloud/uni-preset-vue.git安装VueLanguageFeatures(Volar):Vue3语法提示插件安装TypeScriptVuePlugin(Volar):Vue3的TS......