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

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

时间:2024-12-12 10:29:34浏览次数:5  
标签: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/144377236

相关文章

  • 使用Axis监控监视窑炉溢流口翻板动作 Pyhon实例
    1importsys2fromPyQt5.QtWidgetsimportQApplication,QWidget,QVBoxLayout,QHBoxLayout,QGridLayout,QPushButton,QLabel,QLineEdit,QTextEdit3fromPyQt5.QtGuiimportQImage,QPixmap,QPainter,QPen,QColor,QPalette4fromPyQt5.QtMultimedi......
  • CCLinkIE 转 profinet 网关模块在工控行业的应用实例
     在工业化控制场景中,当三菱PLC控制系统与西门子PLC控制系统面临数据交换需求时,捷米特JM-PN-CCLKIE 通信网关模块成为理想的解决方案。这款由捷米科技自主研发且具备PROFINET从站功能的网关,核心使命在于搭建起CCLINKIE总线与PROFINET网络之间的桥梁。其能够在连接至PN......
  • 【语法】类属性与实例属性
    类属性在Python的面向对象编程中是一个与类本身相关联的变量,而不是与类的特定实例(即对象)相关联。这意味着,无论创建了多少个类的实例,它们访问的都是同一个类属性值。类属性通常用于存储与类本身相关但不需要与特定实例相关联的数据,或者用于在类的所有实例之间共享数据。以下是关于......
  • 一个实例用全创建型模式
      目录:《一个实例讲完23种设计模式》当前:单件+抽象工厂+创建者+工厂方法需求:坦克大战创建两种坦克坦克类型射程速度b7070米时/70公里b5050米时/50公里设计说明1.抽象工厂(AbstractFActory)承担了创建部件的任务2.创建者(IBuilder)承担了讲部件组装的任务3.工厂方法(IF......
  • 什么是反向代理?作用、原理和实例详解
    ......
  • IDApython使用全局变量
    在使用IDApython时,经常会苦恼IDApython中的条件断点运行一次过后变量就会重置,描述的不严谨,具体情形如下:foriinrange(10,20): print(i)假如我在print(i)中下断点:我想要当i增加三次后就停下,我可以这样写ea=get_reg_value("eax")ifea==13: print("stophere!")但是......
  • Redis单实例安装
    Redis单实例安装Redis(RemoteDictionaryServer)是一个开源的内存数据库,遵守BSD协议,它提供了一个高性能的键值(key-value)存储系统,常用于缓存、消息队列、会话存储等应用场景。性能极高:Redis以其极高的性能而著称,能够支持每秒数十万次的读写操作24。这使得Redis成为处理高并发......
  • 全网最适合入门的面向对象编程教程:60 Python面向对象综合实例-传感器数据实时绘图器
    全网最适合入门的面向对象编程教程:60Python面向对象综合实例-传感器数据实时绘图器摘要:本文将结合之前内容实现模拟一个传感器系统软件,包括三个线程:传感器线程生成数据并通过串口发送给主机进程;主机进程通过串口接收指令,进行数据滤波和处理后,将处理结果发送给绘图线程;绘图线......
  • 如何使用红外船舶数据集进行训练,步骤和代码示例应该是如何?含 1284 幅红外遥感图像和30
    红外船舶数据集,包含1284幅红外遥感图像和3061个船舶实例。图像大小为500*500。所有图像都经过辐射校准和快速视线光谱超立方体大气分析。共有373个近岸场景,包含924个实例;911个离岸场景,包含2137个实例。已做好标注,有TXT(YOLO)和XML格式红外船舶数据集,包含1284......
  • 在GPU实例上部署NGC环境
    本文介绍如何在GPU云主机上部署NGC环境。NVIDIANGC是用于深度学习、机器学习和HPC的GPU优化软件的中心,可提供容器、模型、模型脚本和行业解决方案,以便数据科学家、开发人员和研究人员可以专注于更快地构建解决方案和收集见解。前提条件用户需要注册NGC的账号:NGC账号注册。......