首页 > 其他分享 >一个实例用全创建型模式-优化(冗余消除)

一个实例用全创建型模式-优化(冗余消除)

时间:2025-01-11 10:01:41浏览次数:3  
标签:IOperation void class 用全 实例 extends new public 冗余

  

 上一篇:一个实例用全创建型模式-CSDN博客

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

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

需求:坦克大战

创建两种坦克
坦克类型     射程     速度
b70     70米     时/70公里
b50     50米     时/50公里

设计说明

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

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

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

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

类图(红色为优化的部分)

代码

//-----基本功能部分-------------------------
//功能类
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();
}
//发射
abstract class Shot implements IOperation{
	int type;
	public void exe() {
		ShotFun.get().exe(type);
	}
}
//跑
abstract class Run implements IOperation{
	int type;
	public void exe() {
		RunFun.get().exe(type);
	}
}
//-----实现类-----------------------------------------------
//跑-70
class Shot70 extends Shot{
	public Shot70() {
		type = 70;
	}	
}
//跑-50
class Run70 extends Run{
	public Run70() {
		type = 70;
	}
}
//发射-70
class Shot50 extends Shot{
	public Shot50() {
		type = 50;
	}	
}
//发射-50
class Run50 extends Run{
	public Run50() {
		type = 50;
	}
}
//坦克-基类
class Tank implements ITank{
	IOperation mShot;
	IOperation mRun;
	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();
	}
}

运行结果

标签:IOperation,void,class,用全,实例,extends,new,public,冗余
From: https://blog.csdn.net/xie__jin__cheng/article/details/144964241

相关文章

  • 【AI中数学-线代-综合实例-包括python实现】揭秘数据:主成分分析的特征探险
    第三章线性代数--综合实例第4节揭秘数据:主成分分析的特征探险主成分分析(PCA,PrincipalComponentAnalysis)是一种常用的数据降维技术,通过将高维数据投影到低维空间,保留数据中的主要特征和变异性。PCA不仅能够帮助我们理解数据结构,还能提升机器学习算法的效率和性能。本节......
  • 【C++】揭开C++类与对象的神秘面纱(首卷)(类的基础操作详解、实例化艺术及this指针的深
    文章目录一、类的定义1.类定义格式2.类访问限定符3.类域二、类的实例化1.实例化概念2.对象的大小三、隐藏的this指针与相关练习1.this指针的引入与介绍练习1练习2练习3一、类的定义1.类定义格式   在讲解类的作用之前,我们来看看类是如何定义的,在C++中,class......
  • 三层神经网络计算实例
    三层神经网络0.15w10.20w20.25w30.30w40.40w50.45w60......
  • 【Spring Aop】使用全攻略,开启面向切面编程世界的大门
    概述使用AOP(面向切面编程)可以帮助你实现横切关注点(如日志记录、事务管理、权限控制等)的分离,比如你对外提供了一个接口,接口上线后产品又要求需要对接口的出入参做记录,以提供数据支撑供业务分析以及方便问题排查。你想着,这不简单嘛,我只要在接口返回的时候发送一个MQ记录下......
  • 基于Simulink的模糊逻辑控制(Fuzzy Logic Control, FLC)的他励直流电动机与永磁直流电动
    目录基于Simulink的模糊逻辑控制(FuzzyLogicControl,FLC)的他励直流电动机与永磁直流电动机模型实例1.项目背景2.系统架构2.1他励直流电动机简介2.2永磁直流电动机简介2.3模糊逻辑控制原理3.模型设计3.1他励直流电动机建模3.2永磁直流电动机建模3.3模糊逻......
  • 常见的七种贪心算法应用实例
            贪心算法(GreedyAlgorithm)是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的算法策略。以下是一些常见的贪心算法应用实例:1.钱币找零问题:        在找零时,希望用最少数量的钱币凑成特定的金额。......
  • sys.dm_exec_connections:查询与 SQL Server 实例建立的连接有关的信息以及每个连接的
    文章目录引言I基于dm_exec_connections查询客户端ip权限物理联接时间范围dm_exec_connections表seealso:监视SQLServer内存使用量资源信号灯DMVsys.dm_exec_query_resource_semaphores(确定查询执行内存的等待)引言查询历史数据库客户端ip应......
  • 西门子S7-400H冗余PLC与S7-200Smart建立S7通讯
    文章目录前言一、组态从站二、编写程序1.判断主、备CPU运行状态2.编写PUT/GET程序总结前言由于S7-400H是冗余CPU,与S7-200SmartPLC通讯,只能在400PLC程序中编写S7通讯程序。本文主要阐述如何通过Step7软件编写S7通讯程序,关于如何使用博图软件编写S7通讯程序,请参考......
  • PHP大文件上传解决方案实例源码
    要求:免费,开源,专业技术支持前端:vue2,vue3,vue-cli,html5,jquery,webuploader后端:php服务器:linux,centos,Windows,数据库:MySQL,达梦数据库,人大金仓平台:Windows,macOS,Linux,Ubuntu,RedHat,中标麒麟,银河麒麟,统信UOS,信创国产化CPU:x86(Intel,AMD,兆芯,海光),arm(鲲鹏,飞......
  • Simulink开发项1000例实战专栏--实例63:基于Simulink开发一个离网逆变器控制系
    目录基于Simulink的离网逆变器(Off-GridInverter)太阳能光伏发电(Photovoltaic,PV)项目实例介绍1.项目背景2.系统架构2.1主电路设计2.2控制器设计3.代码实现3.1MPPT控制器3.2电池充放电控制器3.3PI控制器3.4PWM控制器4.仿真与优化4.1运行仿真4.2参数优......