架构师训练营第三周作业及总结

用户头像
强哥
关注
发布于: 2020 年 06 月 24 日
架构师训练营第三周作业及总结

作业

一,单例手写

二,组合模式打印登录窗组件

//抽象组件类
public abstract class AComponent {
protected String name;
public void print() {
System.out.println("print " + getClass().getName()
.substring(getClass().getName().lastIndexOf(".") + 1) + "(" + name + ")");
}
//根据head first 设计模式,加这个实现是因为比如label组件不具备该功能,如果调用则抛出异常
protected void add(AComponent aComponent) {
throw new UnsupportedOperationException();
}
}
// 非叶子节点组件
public class WindowForm extends AComponent {
private List<AComponent> childrenComponent = new ArrayList<>();
public WindowForm(String name) {
this.name = name;
}
@Override
public void print() {
super.print();
childrenComponent.forEach(c->c.print());
}
@Override
public void add(AComponent aComponent) {
childrenComponent.add(aComponent);
}
}
//叶子节点组件
public class Button extends AComponent {
public Button(String name) {
this.name = name;
}
@Override
public void print() {
super.print();
}
}
//client
public class Client {
public static void main(String[] args) {
WindowForm window = new WindowForm("Window窗口");
Picture pic = new Picture("LOGO图片");
Button logon = new Button("登录");
Button register = new Button("注册");
Frame frame = new Frame("FRAME1");
Label userNameLabel = new Label("用户名");
Label pwdLabel = new Label("密码");
TextBox userNameTextBox = new TextBox("用户名文本框");
PasswordBox pwdBox = new PasswordBox("密码框");
CheckBox checkBox = new CheckBox("复选框");
Label rememberMe = new Label("记住用户名");
LinkLabel forgetPwd = new LinkLabel("忘记密码");
window.add(pic);
window.add(logon);
window.add(register);
window.add(frame);
frame.add(userNameLabel);
frame.add(userNameTextBox);
frame.add(pwdLabel);
frame.add(pwdBox);
frame.add(checkBox);
frame.add(rememberMe);
frame.add(forgetPwd);
window.print();
}
}



总结

反应式编程框架出现的背景

传统编程基于同步的线程,方法调用者等待被调用方法的处理完才能继续执行。web应用中,容器为用户请求分配一个线程来处理,完全处理完一个用户请求后该线程才能释放以处理新的请求。这会产生一种情况:线程在等待慢IO处理的结果的同时,容器不得不开辟新的线程以处理不断到来的新的请求,由于一个容器启动的线程有限,一旦达到上限,此时如果没有可用的空闲线程,新到来的请求将进入等待,用户层面

看系统就是无响应、不可用的。

另外,在传统的面向对象编程语言中,异步编程是很棘手的事,需要有框架来简化异步数据流

Akka Actor

Akka 中向Actor发消息不是调用Actor的处理方法。否则因等待Actor的处理而落入同步模式。

因此消息发送者将消息发给ActorRef,ActorRef将消息放入Mailbox。Actor从Mailbox取消息处理。

生活中的合作通常也是异步模型,老板交给你一个任务,然后你去落实,老板做自己的事去了,而不会站在你旁边等你做完。你做完告诉老板就行了。老板再来看你处理的结果。

软件设计

目标:高内聚,低耦合,降低软件复杂度

原则:SOLID

模式:可重复使用的解决特定场景问题的方案套路

多年编程为何成了CRUD的码农?

现代应用程序基本都用了各种框架,非业务相关的点基本都有相应的框架去支撑。因此现代程序员基本上在公司只需写CRUD的业务逻辑,因此为了避免只做CRUD,我们可以尝试做些框架的工作,即便只解决某个小规模的问题。写过框架,大概对于框架思维,设计模式等理解都是有益的。

学习了设计模式

单例模式的几种写法,课上没提到effective java提到的枚举创建单例

简单工厂模式及其改进方式及优缺点

适配器模式的2种实现,建议采用实现适配接口,使用组合成员变量(对象)而不是继承(类)的这种方式,因为为了获得方法而继承可能会违背里氏代换原则。

组合模式

关于组合模式心得

最近正好开发菜单树这么个功能,涉及到构建菜单树,学了组合模式后,发现原来菜单的处理可以使用组合模式,基本上之前的构造菜单树这么个过程也是递归去调用处理方法,但是目前的开发实质上还是偏面向过程,处理菜单项的方法并不是菜单项本身的方法,而是都放到了service或其他类中,这样导致

传给方法一些菜单项参数,方法显得不伦不类,实际上放到菜单项对象里且使用组合模式,代码要清爽简洁很多,构造树,只要调用根菜单项的Build即可。

理论结合实践,才能发挥知识的功效啊。带着问题去找方案,去学习效果较好。



用户头像

强哥

关注

这个强哥不太弱 2019.08.06 加入

肚子里的货都在文字里了。

评论

发布
暂无评论
架构师训练营第三周作业及总结