Java
两个幽灵
这个作者很懒,什么都没留下…
展开
-
设计模式(19) 状态模式
state如果模型的很多方法都要根据状态实现,那就可以把状态抽象出来。Operation不会扩展的情况下才能用State模式。interface State { void smile(); void cry();}class Person { State state; void smile() { state.smile(); } void cry() { state.cry(); }}class转载 2020-07-26 13:34:43 · 125 阅读 · 0 评论 -
设计模式(18) 模板方法
template method.模板方法就是钩子函数、回调函数。abstract class Parent { void method() { op1(); op2(); } abstract void op1(); abstract void op2();}class Child extends Parent { void op1() { System.out.println("第一步"); }转载 2020-07-26 13:33:05 · 73 阅读 · 0 评论 -
设计模式(17) 备忘录模式
Memonto记录快照,存盘序列化实体要声明序列化接口class Tank implements Serializable { String name; // 引用的所有对象都要实现序列化 // 不需要序列化用transient关键字 transient List<String> ids;}客户端用ObjectOutputStream保存ObjectOutputStream oos = new ObjectOutputStream(new Fi转载 2020-07-26 13:31:54 · 103 阅读 · 0 评论 -
设计模式(16) 原型模式
Prototype, 克隆旧对象。工作中很少用。Java中的原型模式实现原型模式需要实现标记型接口 Cloneable。一般会重写clone()方法。如果只实现clone()方法,而没实现接口,调用时会抛出异常。一般用于一个对象的属性已经确定,需要产生很多相同对象的时候。class Person implements Cloneable { int age = 8; int score = 100; Location location = new Location();转载 2020-07-26 13:30:29 · 99 阅读 · 0 评论 -
设计模式(15) 命令模式
Command转载 2020-07-25 22:54:11 · 78 阅读 · 0 评论 -
设计模式(14) 桥接模式
Bridge. 在抽象和具体两个维度上同时发展具体的Gift实现abstract class GiftImpl {}class Car extends GiftImpl { @Override public String toString() { return "汽车"; }}class Flower extends GiftImpl { @Override public String toString() { retu转载 2020-07-25 15:15:54 · 86 阅读 · 0 评论 -
设计模式(13) 适配器模式
Adapter, Wrapper当一个类不能直接访问另一个类的时候,加一个适配器比如字符流FileInputStream fis = new FileInputStream("test.txt");InputStreamReader isr = new InputStreamReader(fis);BufferedReader br = new BufferedReader(isr);String line = br.readLine();或 JDBC-ODBC-Bridge...转载 2020-07-25 15:13:04 · 104 阅读 · 0 评论 -
设计模式(12) 建造者模式
Builder, 构建复杂对象实体与构造器public class Person { String name; int age; Location loc; private Person() {} public static class PersonBuilder { Person p = new Person(); public PersonBuilder basicInfo(String name, int age) {转载 2020-07-25 15:10:20 · 98 阅读 · 0 评论 -
设计模式(11) 访问者
Visitor, 在结构固定的情况下,动态改变对于内部元素的动作。用于编译器解析语法树用于ASM Readerimport jdk.internal.org.objectweb.asm.ClassReader;import jdk.internal.org.objectweb.asm.ClassVisitor;import jdk.internal.org.objectweb.asm.FieldVisitor;import jdk.internal.org.objectweb.asm.Meth转载 2020-07-25 15:07:55 · 91 阅读 · 0 评论 -
设计模式(10) 迭代器
Iterator需要一个专门的遍历接口。interface Iterator<T> { boolean hasNext(); T next();}interface Collection<T> { Iterator<T> iterator();}含有迭代器的集合class List implements Collection<Integer>{ private Integer[] elements;转载 2020-07-25 11:35:59 · 144 阅读 · 0 评论 -
设计模式(9) 代理模式
Proxy静态代理接口和实体interface Movable { void move();}class Tank implements Movable { void move() {}}代理class TankProxy implements Movable { Movable m; public TankProxy(Movable m) { this.m = m; } public void move() { long s转载 2020-07-25 11:33:48 · 87 阅读 · 0 评论 -
设计模式(8) 享元模式
Flyweight, 重复利用对象把需要的一堆对象放到Pool里,需要的时候从Pool里拿简单的享元模式实体类class Bullet { bool isUsing;}池子class BulletPool { List<Bullet> bullets = new ArrayList<>(); { for (int i = 0; i < 100; i++) { bullets.add(new Bull转载 2020-07-25 11:21:11 · 70 阅读 · 0 评论 -
设计模式(7) 观察者
Observer, 事件处理模型实体类class Child { public List<Observer> observers = new ArrayList<>(); public Child() { observers.add(new Mom()); observers.add(new Dad()); } public void wakeUp() { WakeUpEvent event =转载 2020-07-25 11:19:36 · 77 阅读 · 0 评论 -
设计模式(6) 责任链
Chain of Responsibility单向责任链实体类class Msg { String name; String msg; public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; }}基本Filterinterface Filter { boolean filte转载 2020-07-20 16:17:40 · 108 阅读 · 0 评论 -
设计模式(5) 装饰器模式
DecoratorDecorator不再专属于子弹或坦克,他是给GameObject做装饰的,所以任何一个GameObject都可以和某一个具体的Decorator聚合到一起。当子弹和RectDecorator聚合到一起的时候,就可以给子弹加方框;当子弹和TailDecorator聚合到一起的时候,就可以给自带加尾巴。当new RectDecorator()并把子弹传进来,然后再new TailDecorator的时候,就可以既加方框又加尾巴。...转载 2020-07-20 16:10:37 · 156 阅读 · 0 评论 -
设计模式(4) 门面与调停者
Facade and Mediator门面模式由于内部的模式非常复杂,所以添加一个门面帮客户管理复杂逻辑。调停者模式增加调停者之前增加调停者之后著名用途:消息中间件 (MessageQueue),解耦也许以后会再补充...转载 2020-07-20 16:05:55 · 231 阅读 · 1 评论 -
设计模式(3) 工厂模式
工厂模式任何可以产生对象的方法或类,都可以称之为工厂。单例模式也叫静态工厂。简单工厂相当于只能生产一个产品的抽象工厂。好处:容易扩展单一产品。public class SimpleVehicleFactory { public Car createCar() {转载 2020-07-20 11:31:04 · 103 阅读 · 0 评论 -
设计模式(2) 策略模式
策略模式比较器接口public interface Comparator<T> { int compare(T o1, T o2);}sort方法public class Sorter<T> { public void sort(T[] arr, Comparator<T> comparator) { for (int i = 0; i < arr.length; i++) { int minP转载 2020-07-19 13:11:43 · 85 阅读 · 0 评论 -
设计模式(1) 单例模式
单例模式Singleton应用场景:只需要一个实例写法1 饿汉式 多线程安全 常用public class Mgr01 { private static final Mgr01 INSTANCE = new Mgr01(); private Mgr01() {} public static Mgr01 getInstance() { return INSTANCE; }}static: 在类被load时只初始化一次final: 防止示例被修转载 2020-07-18 20:36:51 · 128 阅读 · 0 评论 -
CountDownLatch使用说明 - Java线程并发工具
CountDownLatch是一种java.util.concurrent包下一个同步工具类。它可以让≥1个线程等待一组其它线程的操作执行完成。【翻译】CountDown是倒计时,Latch是门闩。 1、CountDownLatch end = new CountDownLatch(N); // 新建倒计时锁,容量是N 2、end.await() // 阻塞线程。直到调用N次en...原创 2019-07-05 14:33:46 · 214 阅读 · 0 评论