美文网首页
clean code笔记三

clean code笔记三

作者: 对影成三人_bac5 | 来源:发表于2018-05-14 15:11 被阅读0次

    9、系统

    软件系统

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

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

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

    将系统的构造和使用分开

    1.分解mian

    将构造与使用分开的方法之一是将全部的构造过程搬迁到main模块中,设计系统的其余部分时,假设所有对象(运行程序前所需的)都已正确构造和设置。

    main函数创建系统所需的对象,再传给application。这时候,应用程序应对对象的构造过程一无所知

    2.工厂

    分解main的方法中,应用程序并不知道对象何时被创建,但是有些情况下,应用程序也要负责确定创建对象的时机,例如在某订单处理系统中,应用程序必须创建LineItem实体并添加到Order对象。

    这种情况下,我们可以应用抽象工厂模式让应用程序自行控制何时创建LineItem,同时构造的细节隔离于应用程序代码之外。如图所示,从箭头的方向可知,应用程序OrderProcessing与如何构建LineItem的细节是分离开的,它只拥有抽象工厂方法的接口,具体细节是由main这边的LineItemFactoryImplementation实现的。但应用程序能完全控制LineItem实体何时创建,甚至能传递应用特定的构造器参数。

    0_1328414707Rk6k.gif.png

    代码示例

    @author ASCE1885

    public class Main {

    publicstaticvoidmain(String[] args){    LineItemFactory lif =newLineItemFactoryImpl();    OrderProcessing op =newOrderProcessing(lif);    op.run();}

    }

    public class LineItemFactoryImpl implements LineItemFactory {

    privateLineItem lineItem;@OverridepublicLineItemmakeLineItem(String name){if(null== lineItem) {        lineItem =newLineItem(name);    }returnlineItem;}

    }

    public class OrderProcessing {

    privateLineItem lineItem;privateLineItemFactory lineItemFactory;publicOrderProcessing(LineItemFactory lif){    lineItemFactory = lif;}publicvoidrun(){    lineItem = lineItemFactory.makeLineItem("ASCE1885");    System.out.println("The name of lineItem is : "+ lineItem.getName());}

    }

    public interface LineItemFactory {

    publicLineItemmakeLineItem(String name);

    }

    public class LineItem {

    privateString name;publicStringgetName(){returnname;}publicvoidsetName(String name){this.name = name;}publicLineItem(String name){this.name = name;}

    }

    相关文章

      网友评论

          本文标题:clean code笔记三

          本文链接:https://www.haomeiwen.com/subject/wfqjdftx.html