梳理你的思路(从OOP到架构设计)_设计模式Template Method模式

ops/2024/12/29 5:21:35/

目录

1、Template Method模式

2、范例: Android + TM模式

3、基于TM模式的扩充:以游戏的绘图循环(Game Loop)为例

4、Android中处处可见TM模型的应用


1、Template Method模式

在前面各节里,我们介绍过,控制反转(IoC:Inversion of Control)是<基类/子类>结构里的重要机制。 Template Method模式是实现IoC的一种基本模式。

2、范例: Android + TM模式

Android的绘图是使用画布(Canvas)来把图显示于View的窗口里,并且从View类别而衍生子类别,提供更多功能来将图形或图片绘制于画布上。

在View类别里有个onDraw()函数, View类别体系里的每一个类别都必须覆写(Override) 这个onDraw()函数,来执行实际绘图的动作。

// myView.java
//…….
public class myView extends View {private Paint paint= new Paint();private int line_x = 100, line_y = 100;private float count = 0;myView(Context ctx) { super(ctx); }@Override protected void onDraw(Canvas canvas) {super.onDraw(canvas);if( count > 12)count = 0;int x = (int) (75.0 * Math.cos(2*Math.PI * count/12.0));int y = (int) (75.0 * Math.sin(2*Math.PI * count/12.0));count++;canvas.drawColor(Color.WHITE);paint.setColor(Color.BLACK);paint.setStrokeWidth(3);canvas.drawLine(line_x, line_y, line_x+x, line_y+y, paint);paint.setStrokeWidth(2);paint.setColor(Color.RED);canvas.drawRect(line_x-5, line_y - 5,line_x+5, line_y + 5, paint);paint.setColor(Color.YELLOW);canvas.drawRect(line_x-3, line_y - 3, line_x+3,line_y + 3, paint);}
}

 

3、基于TM模式的扩充:以游戏的绘图循环(Game Loop)为例

游戏的基本动作就是不断的进行:绘图和刷新(Refresh)画面。其中, onDraw()函数实践画图,将图形绘制于View的画布(Canvas)上,并显示出来;而invalidate()函数则启动画面的刷新,重新呼叫一次onDraw()函数。

// myView.java
// …….
public class myView extends View {private Paint paint= new Paint();private int line_x = 100, line_y = 100;myView(Context ctx) { super(ctx); }@Override protected void onDraw(Canvas canvas) {super.onDraw(canvas);//-----------------------------------------------------if( count > 12) count = 0;int x = (int) (75.0 * Math.cos(2*Math.PI * count/12.0));int y = (int) (75.0 * Math.sin(2*Math.PI * count/12.0));count++;//---------------------------------------------canvas.drawColor(Color.WHITE);paint.setColor(Color.BLACK);paint.setStrokeWidth(3);canvas.drawLine(line_x, line_y, line_x+x, line_y+y, paint);paint.setStrokeWidth(2);paint.setColor(Color.RED);canvas.drawRect(line_x-5, line_y - 5, line_x+5, line_y + 5, paint);paint.setColor(Color.YELLOW);canvas.drawRect(line_x-3, line_y - 3, line_x+3, line_y + 3, paint);try {Thread.sleep(1000);}catch (InterruptedException ie) {}invalidate();}
}// myActivity.java
// ……
public class myActivity extends Activity implements OnClickListener {private myView mv = null;private Button ibtn;@Overrideprotected void onCreate(Bundle icicle) {super.onCreate(icicle);public void show_layout_01(){LinearLayout layout = new LinearLayout(this);layout.setOrientation(LinearLayout.VERTICAL);mv = new myView(this);LinearLayout.LayoutParams param =new LinearLayout.LayoutParams(200, 200);param.topMargin = 10; param.leftMargin = 10;layout.addView(mv, param);ibtn = new Button(this);ibtn.setOnClickListener(this);ibtn.setText("Exit");ibtn.setBackgroundResource(R.drawable.gray);LinearLayout.LayoutParams param1 =new LinearLayout.LayoutParams(200, 65);param1.topMargin = 10; param1.leftMargin = 10;layout.addView(ibtn, param1);//-----------------------------------------------setContentView(layout);}public void onClick(View v) {finish();}
}

 

4、Android中处处可见TM模型的应用

       


http://www.ppmy.cn/ops/145832.html

相关文章

敏捷开发在前端团队的应用

文章目录 前言一、敏捷开发简介二、前端团队面临的挑战三、敏捷开发在前端团队的应用结语 前言 随着互联网行业的快速发展&#xff0c;软件开发的速度和质量变得愈发重要。敏捷开发作为一种高效的项目管理方法论&#xff0c;已经在许多软件开发团队中得到了广泛应用&#xff0…

kafka的备份策略:从备份到恢复

文章目录 一、全量备份二、增量备份三、全量恢复四、增量恢复 前言&#xff1a;Kafka的备份的单元是partition&#xff0c;也就是每个partition都都会有leader partiton和follow partiton。其中leader partition是用来进行和producer进行写交互&#xff0c;follow从leader副本进…

(十)Ubuntu 20.04+akiaaa大神 Stable Diffusion整合包 AI绘画教程-外挂VAE模型等快捷设置教程

一、说明 我们在运行 Stable-Diffusion-webuiclip 时初始快捷设置为如图所示 我们需要显示“外挂VAE模型”以及“clip终止层数”的快捷设置&#xff0c;我们需要在设置中设置参数 二、参数设置 依次点击 设置---》用户界面---》快捷设置列表 然后再下拉菜单中选择 这两部居然…

全国硕士研究生入学考试(考研)常识详解之复试考试科目:笔试、面试与加试

全国硕士研究生入学考试&#xff08;考研&#xff09;常识详解之复试考试科目&#xff1a;笔试、面试与加试 硕士研究生入学考试的复试是对考生进行全面评估的重要环节&#xff0c;旨在考察考生的专业知识、综合素质及科研潜力。复试主要包括笔试与面试两大核心部分&#xff0…

Kafka怎么发送JAVA对象并在消费者端解析出JAVA对象--示例

1、在pom.xml中加入依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-stream-kafka</artifactId><version>3.1.6</version></dependency> 2、配置application.yml 加入Kafk…

sql字段值转字段

表alertlabel中记录变字段 如何用alertlabel表得到下面数据 实现的sql语句 select a.AlertID, (select Value from alertlabel where AlertIDa.AlertID and Labelhost) as host, (select Value from alertlabel where AlertIDa.AlertID and Labeljob) as job from (select …

this的指向问题

在JavaScript和Vue.js的上下文中&#xff0c;this的指向是由函数的调用方式决定的。理解this的指向对于编写正确的Vue组件和JavaScript代码至关重要。 ‌全局上下文中的this‌&#xff1a; 在全局执行环境中&#xff08;比如浏览器中的window对象或者Node.js的全局环境&#…

深度学习驱动的油气开发技术与应用

在深度学习与油气开发领域融合的背景下&#xff0c;科研边界持续扩展&#xff0c;创新成果不断涌现。从基本物理模型构建到油气开发问题的复杂模拟&#xff0c;从数据驱动分析到工程问题的智能解决&#xff0c;深度学习正以前所未有的动力推动油气开发领域的革新。以下是深度学…