2020-08-07

日常笔记

2020-08-05

属性与方法参数

如果没有必要不会往这个类的属性添加东西,添加得越多,你这个类的结构越复杂,一个属性的作用域是整个类,如果你不用这个属性只是给一个方法传一个参数,那它的作用域也只是方法体里,一般来讲你能用传参数就用传参数,缺点是每次传参数都需要new对象,如果你用传参数的方式,请把参数做成单例

fire(FreStrategy s) ->每次调用,都离要new,因此,应该把DefaultsSrategy - Singleton
感员空倒

2020-08-07

责任链模式

public interface Collider {

    void collide(GameObject o1, GameObject o2);
}

public class BulletTankCollider implements Collider {

    @Override
    public void collide(GameObject o1, GameObject o2) {

    }
}

public class TankTankCollider implements Collider {

    @Override
    public void collide(GameObject o1, GameObject o2) {
    
    }
}

public class ColliderChain implements Collider {

    // implements Collider 链条和链条可以组合类型
    List<Collider> colliders = new LinkedList<>();
    
    public ColliderChain() {
        colliders.add(new BulletTankCollider());
        colliders.add(new TankTankCollider());
    }

    @Override
    public void collide(GameObject o1, GameObject o2) {
        for (int i = 0; i < colliders.size(); i++) {
            colliders.get(i).collide(o1, o2);
        }
    }

    void add(Collider c) {
        colliders.add(c);
    }
}

每一个子类的对象都负责具体的某一种责任
返回值true/false 判断是否继续往下执行

当新加一个游戏物体的时候只和GameModel打交道,至于原来有多少种游戏物体,跟我没关系我不需要去修改他们,也不需要动他们原来的代码

GameModel即是是门面也是调停者(
对与TankFarme来说它是门面(对外的)
之前TankFarme需要与所有的游戏物体打交道,现在不用了
对游戏物体内部来说它就是调停者(对内的)
GameMoel运用了责任链模式,把新的游戏物体和游戏物体之间的耦合给解除了调停者结合责任链)
在这里插入图片描述

instanceof

o1 instanceof Bullet
o1是不是Bullet的一个实例,返回一个布尔类型

高内聚,低耦合

属于我的责任都放在我的责任这,不属于我的责任我尽量不参与

耦合级别

  • 继承
  • 聚合
  • A类参与或关联B类

对象实例化顺序

(1) 父类静态代码块(包括静态初始化块,静态属性,但不包括静态方法)
(2) 子类静态代码块(包括静态初始化块,静态属性,但不包括静态方法 )
(3) 父类非静态代码块( 包括非静态初始化块,非静态属性 )
(4) 父类构造函数
(5) 子类非静态代码块 ( 包括非静态初始化块,非静态属性 )
(6) 子类构造函数
其中静态属性和静态代码块按排列先后顺序执行,静态代码块只运行一次
在这里插入图片描述

在这里插入图片描述

class Main {
    public static void main(String[] args) {
        Pos instance = Pos.getInstance();

    }
}

class Pos implements Product {

    private static final Pos p = new Pos();
    
    static {
        p.init();
    }

    public static Pos getInstance() {
        return p;
    }
}
	
输出:
	构造方法
	初始化方法
此案例 执行顺序为:

(1) private static final Pos p = new Pos();
(2) private void Pos(){
	}
(3) static {
         p.init();
     }

2020-08-09

当你在一个类里面添加一个静态常量,你直接拿来用就行了,但是你有用了另外一个引用去指向他,完全没有必要

装饰者模式 Decorator

问题:

  • 坦克想加一个外壳显示
  • 想加一个血条
  • 想加一条尾巴
  • 子弹想加一条尾巴
  • 子弹想加一个外壳

如果用继承,不灵活:装饰和被装
饰者之间耦合度太高

进一步

  • Tank

  • TankDecoratonr

    • tank paint()-> tank. paint() +装饰

    桥梁模式是两个分支独立的发展,Decoratonr强调是我对你的一个装饰,是语义上的,

很多模式不是在语法上的一个区别而是在语义上的(语法一样但语义可能有所区别)
装饰的物体可以自由发展,被装饰的物体也可以自由的发展
当你的代码越来越别扭,下次加工序的时候,需求再变动,内容再增加的时候,我能更方便,这时候设计模式就用到了,看具体需求来写设计模式

在这里插入图片描述
在这里插入图片描述

出现问题
RectDecorator Bullet 需要添加到GameModel
print和碰撞检测 都需要添加到list
子弹添加了两遍
子弹碰到边界之后不会从内存消失,方块坐标指向子弹会继续存在

观察者模式 Observer

事件源对象(被观察者,是谁发出的这件事)
观察者(是在等着这件事)
事件本身

事件源产生事件,而事件作用于观察者
在这里插入图片描述
责任链的侧重点在这个链条上,而观察者的重点是在这个观察上,是在某一个事件上,事件在链条里面穿行,只是语义上不一样

在很多系统中, observer模式往往和责任链共同负责对于事件的处理,其中的某一个observer负责尼含将事件进一步传递

组合模式

在这里插入图片描述

享元模式

连接池
在这里插入图片描述

代理模式

在这里插入图片描述

迭代器模式

在这里插入图片描述

访问者模式

访问者Visitor
在结构不变的情况下动态改变对于内部元素的动作
在这里插入图片描述

责任链模式

在filterChain中处理加入位置的记录
同时在filter中加入第三个参数

建造者模式

Builder
构建复杂对象
在这里插入图片描述
解析

  • 分离复杂对象的构建和表示
  • 同样的构建过程可以创建不同的表示
  • 无需记忆, 自然使用

适配器模式

Adapter(Wrapper)
接口转换器
在这里插入图片描述

桥接模式

用聚合代替继承
使用桥接模式:
分离抽象与具体实现,让他们可以独自发展
Gift -> warmGift ColdGift WildGift
GiftImpl -> Flower Ring Car
在这里插入图片描述

命令模式

封装命令
调用者和执行者中间的是命令

聊天框架

Aio
多线程 线程爆炸
线程连接池 线程阻塞

Bio
Selector.select() SelectKey
单线程 大管家 事件类型 事件list 遍历 多线程处理 异步返回 非阻塞

Cio
主线程池 boss 只负责客户端的连接
从线程池 worker 处理IO事件
辅助启动类
通道类型 阻塞,非阻塞,服务端
通道处理 初始化方法、通道 连接回调
连接/绑定
监听
同步阻塞,阻塞等待直到连接完成
closeFuture没被调用之前一直等待
在这里插入图片描述
在这里插入图片描述
管道 流数据的 输入 输出 被处理 责任处理器
第一次连接可用
读数据
ButeBuf 写到内存当中,必须得释放 release方法和writeAndFlush
消息:有两个指针 读指针和写指针,字节数
读消息:从读指针开始读多少个字节

处理器 责任链模式 编解码 默认Object(ByteBuf)可以解码成其他类型
ByteBuf 自定义消息协议规范
消息类型 字节数组长度 字节数组

在这里插入图片描述

在这里插入图片描述
小于八不读(消息头)
大于八了开始读
读到哪个位置,读的标记
整个消息有多长
长度够了解析
输出对象

两辆坦克联机

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值