栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

设计模式学习--复合模式(Compound Pattern),大厂Android面试总结+详细解答

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

设计模式学习--复合模式(Compound Pattern),大厂Android面试总结+详细解答

sequence.deleteTrack(null);

track = sequence.createTrack();

makeTracks(trackList);

track.add(makeEvent(192,9,1,0,4));

try {

sequencer.setSequence(sequence);

} catch(Exception e) {

e.printStackTrace();

}

}

public void makeTracks(int[] list) {

for (int i = 0; i < list.length; i++) {

int key = list[i];

if (key != 0) {

track.add(makeEvent(144,9,key, 100, i));

track.add(makeEvent(128,9,key, 100, i+1));

}

}

}

public MidiEvent makeEvent(int comd, int chan, int one, int two, int tick) {

MidiEvent event = null;

try {

ShortMessage a = new ShortMessage();

a.setMessage(comd, chan, one, two);

event = new MidiEvent(a, tick);

} catch(Exception e) {

e.printStackTrace();

}

return event;

}

}

观察者

**BeatObserve

《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整资料开源分享

r.java**

package combined;

public interface BeatObserver {

void updateBeat();

}

BPMObserver.java

package combined;

public interface BPMObserver {

void updateBPM();

}

视图

BeatBar.java

package combined;

import javax.swing.JProgressBar;

public class BeatBar extends JProgressBar implements Runnable {

JProgressBar progressBar;

Thread thread;

public BeatBar() {

thread = new Thread(this);

setMaximum(100);

thread.start();

}

@Override

public void run() {

for(; {

int value = getValue();

value = (int)(value * 0.75);

setValue(value);

repaint();

try {

Thread.sleep(50);

} catch (Exception e) {

e.printStackTrace();

}

}

}

}

DJView.java

package combined;

import java.awt.BorderLayout;

import java.awt.Dimension;

import java.awt.GridLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.imageio.plugins.bmp.BMPImageWriteParam;

import javax.swing.BorderFactory;

import javax.swing.JButton;

import javax.swing.Jframe;

import javax.swing.JLabel;

import javax.swing.JMenu;

import javax.swing.JMenuBar;

import javax.swing.JMenuItem;

import javax.swing.JPanel;

import javax.swing.JTextField;

import javax.swing.SwingConstants;

public class DJView implements ActionListener, BeatObserver, BPMObserver {

BeatModelInterface model;

ControllerInterface controller;

Jframe viewframe;

JPanel viewPanel;

BeatBar beatBar;

JLabel bpmOutputLabel;

Jframe controlframe;

JPanel controlPanel;

JLabel bpmLabel;

JTextField bpmTextField;

JButton setBPMButton;

JButton increaseBPMButton;

JButton decreaseBPMButton;

JMenuBar menuBar;

JMenu menu;

JMenuItem startMenuItem;

JMenuItem stopMenuItem;

public DJView(ControllerInterface controller, BeatModelInterface model) {

this.controller = controller;

this.model = model;

model.registerObserver((BeatObserver)this);

model.registerObserver((BPMObserver)this);

}

public void createView() {

// Create all Swing components here

viewPanel = new JPanel(new GridLayout(1, 2));

viewframe = new Jframe(“View”);

viewframe.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);

viewframe.setSize(new Dimension(100, 80));

bpmOutputLabel = new JLabel(“offline”, SwingConstants.CENTER);

beatBar = new BeatBar();

beatBar.setValue(0);

JPanel bpmPanel = new JPanel(new GridLayout(2, 1));

bpmPanel.add(beatBar);

bpmPanel.add(bpmOutputLabel);

viewPanel.add(bpmPanel);

viewframe.getContentPane().add(viewPanel, BorderLayout.CENTER);

viewframe.pack();

viewframe.setVisible(true);

}

public void createControls() {

// Create all Swing components here

Jframe.setDefaultLookAndFeelDecorated(true);

controlframe = new Jframe(“Control”);

controlframe.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);

controlframe.setSize(new Dimension(100, 80));

controlPanel = new JPanel(new GridLayout(1, 2));

menuBar = new JMenuBar();

menu = new JMenu(“DJ Control”);

startMenuItem = new JMenuItem(“Start”);

menu.add(startMenuItem);

startMenuItem.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent event) {

controller.start();

}

});

stopMenuItem = new JMenuItem(“Stop”);

menu.add(stopMenuItem);

stopMenuItem.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent event) {

controller.stop();

}

});

JMenuItem exit = new JMenuItem(“Quit”);

exit.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent event) {

System.exit(0);

}

});

menu.add(exit);

menuBar.add(menu);

controlframe.setJMenuBar(menuBar);

bpmTextField = new JTextField(2);

bpmLabel = new JLabel(“Enter BPM:”, SwingConstants.RIGHT);

setBPMButton = new JButton(“Set”);

setBPMButton.setSize(new Dimension(10,40));

increaseBPMButton = new JButton(">>");

decreaseBPMButton = new JButton("<<");

setBPMButton.addActionListener(this);

increaseBPMButton.addActionListener(this);

decreaseBPMButton.addActionListener(this);

JPanel buttonPanel = new JPanel(new GridLayout(1, 2));

buttonPanel.add(decreaseBPMButton);

buttonPanel.add(increaseBPMButton);

JPanel enterPanel = new JPanel(new GridLayout(1, 2));

enterPanel.add(bpmLabel);

enterPanel.add(bpmTextField);

JPanel insideControlPanel = new JPanel(new GridLayout(3, 1));

insideControlPanel.add(enterPanel);

insideControlPanel.add(setBPMButton);

insideControlPanel.add(buttonPanel);

controlPanel.add(insideControlPanel);

bpmLabel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));

bpmOutputLabel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));

controlframe.getRootPane().setDefaultButton(setBPMButton);

controlframe.getContentPane().add(controlPanel, BorderLayout.CENTER);

controlframe.pack();

controlframe.setVisible(true);

}

public void enableStopMenuItem() {

stopMenuItem.setEnabled(true);

}

public void disableStopMenuItem() {

stopMenuItem.setEnabled(false);

}

public void enableStartMenuItem() {

startMenuItem.setEnabled(true);

}

public void disableStartMenuItem() {

startMenuItem.setEnabled(false);

}

public void actionPerformed(ActionEvent event) {

if (event.getSource() == setBPMButton) {

int bpm = Integer.parseInt(bpmTextField.getText());

controller.setBPM(bpm);

} else if (event.getSource() == increaseBPMButton) {

controller.increaseBPM();

} else if (event.getSource() == decreaseBPMButton) {

controller.decreaseBPM();

}

}

public void updateBPM() {

if (model != null) {

int bpm = model.getBPM();

if (bpm == 0) {

if (bpmOutputLabel != null) {

bpmOutputLabel.setText(“offline”);

}

} else {

if (bpmOutputLabel != null) {

bpmOutputLabel.setText("Current BPM: " + model.getBPM());

}

}

}

}

public void updateBeat() {

if (beatBar != null) {

beatBar.setValue(100);

}

}

}

控制器

package combined;

public interface ControllerInterface {

void start();

void stop();

void increaseBPM();

void decreaseBPM();

void setBPM(int bpm);

}

BeatController.java

package combined;

public class BeatController implements ControllerInterface {

BeatModelInterface model;

DJView view;

public BeatController(BeatModelInterface model) {

this.model = model;

view = new DJView(this, model);

view.createView();

view.createControls();

view.disableStopMenuItem();

view.disableStartMenuItem();

model.initialize();

}

@Override

public void start() {

model.on();

view.disableStartMenuItem();

view.enableStopMenuItem();

}

@Override

public void stop() {

model.off();

view.disableStopMenuItem();

view.enableStartMenuItem();

}

@Override

public void increaseBPM() {

int bpm = model.getBPM();

model.setBPM(bpm + 1);

}

@Override

public void decreaseBPM() {

int bpm = model.getBPM();

model.setBPM(bpm - 1);

}

@Override

public void setBPM(int bpm) {

model.setBPM(bpm);

}

}

测试

DJTestDrive.java

package combined;

public class DJTestDrive {

public static void main (String[] args) {

BeatModelInterface model = new BeatModel();

ControllerInterface controller = new BeatController(model);

}

}

效果如下图:

如何成为Android高级架构师!

架构师必须具备抽象思维和分析的能力,这是你进行系统分析和系统分解的基本素质。只有具备这样的能力,架构师才能看清系统的整体,掌控全局,这也是架构师大局观的形成基础。 你如何具备这种能力呢?一是来自于经验,二是来自于学习。

架构师不仅要具备在问题领域上的经验,也需要具备在软件工程领域内的经验。也就是说,架构师必须能够准确得理解需求,然后用软件工程的思想,把需求转化和分解成可用计算机语言实现的程度。经验的积累是需要一个时间过程的,这个过程谁也帮不了你,是需要你去经历的。

但是,如果你有意识地去培养,不断吸取前人的经验的话,还是可以缩短这个周期的。这也是我整理架构师进阶此系列的始动力之一。


成为Android架构师必备知识技能

对应导图的学习笔记(由阿里P8大牛手写,我负责整理成PDF笔记)

部分内容展示

《设计思想解读开源框架》

  • 目录
  • 热修复设计
  • 插件化框架设计

    《360°全方面性能优化》
  • 设计思想与代码质量优化
  • 程序性能优化

统分析和系统分解的基本素质。只有具备这样的能力,架构师才能看清系统的整体,掌控全局,这也是架构师大局观的形成基础。 你如何具备这种能力呢?一是来自于经验,二是来自于学习。

架构师不仅要具备在问题领域上的经验,也需要具备在软件工程领域内的经验。也就是说,架构师必须能够准确得理解需求,然后用软件工程的思想,把需求转化和分解成可用计算机语言实现的程度。经验的积累是需要一个时间过程的,这个过程谁也帮不了你,是需要你去经历的。

但是,如果你有意识地去培养,不断吸取前人的经验的话,还是可以缩短这个周期的。这也是我整理架构师进阶此系列的始动力之一。


成为Android架构师必备知识技能

[外链图片转存中…(img-sQsyDMgG-1640330445298)]

对应导图的学习笔记(由阿里P8大牛手写,我负责整理成PDF笔记)

[外链图片转存中…(img-LDNHbJXD-1640330445331)]

部分内容展示

《设计思想解读开源框架》

  • 目录
    [外链图片转存中…(img-F0BWeJOy-1640330445332)]
  • 热修复设计
    [外链图片转存中…(img-n0V4GfgC-1640330445333)]
  • 插件化框架设计
    [外链图片转存中…(img-mBG2vBLj-1640330445333)]
    《360°全方面性能优化》
    [外链图片转存中…(img-eEAqMzEx-1640330445334)]
  • 设计思想与代码质量优化
    [外链图片转存中…(img-gXe86FNN-1640330445334)]
  • 程序性能优化
    [外链图片转存中…(img-pUdhRv0F-1640330445335)]

本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/679154.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号