clean code笔记9:系统(一)

软件系统


一个系统就像一个城市,该如何管理呢。

城市能运转,还因为它演化出来恰当的抽象等级和模块,好让个人和他们所管理的“组件”在不了解全局时也能有效运转

整洁的代码帮助我们在较低抽象层级上达到这一目标,本章将讨论如何在较高的抽象层级——系统层级——上保持整洁。

将系统的构造和使用分开


1.分解mian

  1. 将构造与使用分开的方法之一是将全部的构造过程搬迁到main模块中,设计系统的其余部分时,假设所有对象(运行程序前所需的)都已正确构造和设置。
  2. main函数创建系统所需的对象,再传给application。这时候,应用程序应对对象的构造过程一无所知

2.工厂

  1. 分解main的方法中,应用程序并不知道对象何时被创建,但是有些情况下,应用程序也要负责确定创建对象的时机,例如在某订单处理系统中,应用程序必须创建LineItem实体并添加到Order对象。
  1. 这种情况下,我们可以应用抽象工厂模式让应用程序自行控制何时创建LineItem,同时构造的细节隔离于应用程序代码之外。如图所示,从箭头的方向可知,应用程序OrderProcessing与如何构建LineItem的细节是分离开的,它只拥有抽象工厂方法的接口,具体细节是由main这边的LineItemFactoryImplementation实现的。但应用程序能完全控制LineItem实体何时创建,甚至能传递应用特定的构造器参数。
0_1328414707Rk6k.gif.png

代码示例

@author ASCE1885

public class Main {

public static void main(String[] args) {
    LineItemFactory lif = new LineItemFactoryImpl();
    OrderProcessing op = new OrderProcessing(lif);
    op.run();
}

}

public class LineItemFactoryImpl implements LineItemFactory {

private LineItem lineItem;

@Override
public LineItem makeLineItem(String name) {
    if (null == lineItem) {
        lineItem = new LineItem(name);
    }
    return lineItem;
}

}

public class OrderProcessing {

private LineItem lineItem;
private LineItemFactory lineItemFactory;

public OrderProcessing(LineItemFactory lif) {
    lineItemFactory = lif;
}

public void run() {
    lineItem = lineItemFactory.makeLineItem("ASCE1885");
    System.out.println("The name of lineItem is : " + lineItem.getName());
}

}
public interface LineItemFactory {

public LineItem makeLineItem(String name);

}

public class LineItem {

private String name;

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public LineItem(String name) {
    this.name = name;
}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,868评论 18 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,754评论 18 399
  • 小编费力收集:给你想要的面试集合 1.C++或Java中的异常处理机制的简单原理和应用。 当JAVA程序违反了JA...
    八爷君阅读 4,650评论 1 114
  • 1.神话 是的
    唐琥阅读 217评论 0 1
  • 清盏孤茶 风铃叮咚,击碎回忆。 时钟滴答,搅乱心伤。 音符跳动着打破沉寂, 却跳不出琴谱的魔掌...
    清盏孤茶阅读 400评论 0 2