JAVA味大概是这样的:
大概是这样:
public interface Subject { public void attach(Observer observer); public void detach(Observer observer); public void notifyObservers(); } public interface Observer { public void update(Subject subject); } public class HelloWorldSubject implements Subject { private ArrayList<Observer> observers; private String str; public HelloWorldSubject() { super(); observers = new ArrayList<Observer>(); } public void attach(Observer observer) { observers.add(observer); } public void detach(Observer observer) { observers.remove(observer); } public void notifyObservers() { Iterator<Observer> iter = observers.iterator(); while (iter.hasNext()) { Observer observer = iter.next(); observer.update(this); } } public String getStr() { return str; } public void setStr(String str) { this.str = str; notifyObservers(); } } public class HelloWorldObserver implements Observer { public void update(Subject subject) { HelloWorldSubject sub = (HelloWorldSubject) subject; System.out.println(sub.getStr()); } } public interface Command { void execute(); } public class HelloWorldCommand implements Command { private HelloWorldSubject subject; public HelloWorldCommand(Subject subject) { super(); this.subject = (HelloWorldSubject) subject; } public void execute() { subject.setStr("hello world"); } } public interface AbstractFactory { public Subject createSubject(); public Observer createObserver(); public Command createCommand(Subject subject); } public class HelloWorldFactory implements AbstractFactory { public Subject createSubject() { return new HelloWorldSubject(); } public Observer createObserver() { return new HelloWorldObserver(); } public Command createCommand(Subject subject) { return new HelloWorldCommand(subject); } } public class FactoryMakerSingleton { private static FactoryMakerSingleton instance = null; private AbstractFactory factory; private FactoryMakerSingleton() { factory = new HelloWorldFactory(); } public static synchronized FactoryMakerSingleton getInstance() { if (instance == null) { instance = new FactoryMakerSingleton(); } return instance; } public AbstractFactory getFactory() { return factory; } } public class AbuseDesignPatterns { public static void main(String[] args) { AbstractFactory factory = FactoryMakerSingleton.getInstance() .getFactory(); Subject subject = factory.createSubject(); subject.attach(factory.createObserver()); Command command = factory.createCommand(subject); command.execute(); } }
这样封装他们觉得很灵活 会以生物学角度看待 oop
但就我来看就是奇美拉 透过继承等特性合成对象 这一串看起来是灵活了 看来是个战力高的生物 但很难与其它类相容 不是不行 但得绞尽脑汁 必需得经过生物演化痛苦的过程
java 还是可以写不那么 oop 类与命名空间我觉得雷同
但很少人写的简洁
JAVA味大概是这样的:
1. 无意义的抽象和继承,简单问题复杂化,自以为是预留扩展性,然而绝大多数情况下非但用不到,反而是增加了复杂度和项目维护成本(当然有人把这种操作当作防御式编程增加自身不可替代性,实际结果往往不过是叠屎山)
2. 滥用多线程。有些人似乎觉得 java 不写多线程很 low ,结果滥用多线程,没必要的时候也要强上,然而很多 javaer 实际的心智水平根本玩不转多线程,要么自以为提高效率的多线程实际比一般写法还慢,要么生产出现线程安全甚至死锁,纯纯又菜又爱玩自讨苦吃
3. 滥用架构。web 服务必上 redis ,设计必须拆成微服务,看似追求最近技术方案,然而却抱着 mysql5.7 、centos6 不放,整天还研究 java1.8 的 jvm 调参,就不想想守着这堆破烂搞架构的路子能走多远。
4. 把一些 java 本身缺陷导致的东西当作唯一正确性去要求别的语言和框架,比如语法贫瘠导致的各种设计模式,比如灵活性不足而不得不使用的反射技术,比如落后的线程模型催生的一堆教条,很多新的语言和框架从本身就已经解决或者规避了,有些 javaer 用的时候却还习惯性往上靠,靠的不对劲了还觉得是那些语言和框架不行,反正就是 java 祖宗之法不可变……
open().read()
fd = open(...); read(fd, ...);
File(...).readAll()
ioutils.read(...)
Java 味儿,来,先学一下 reader, buffered reader, inputstream, buffered input stream ,然后再研究用哪个,中间包的用完了该不该 close 。
设计时就确定只有一个 implementation ,也要强行定义 interface ,还要定义一堆一模一样的 vo/dto...,不要问,问就是业界规范,大家都这么干。
大概是这样: