关于程序员:设计模式之简单工厂模式

36次阅读

共计 1658 个字符,预计需要花费 5 分钟才能阅读完成。

简略工厂模式

Simple Factory Pattern:定义一个工厂类,它能够依据参数的不同返回不同类的实例,被创立的实例通常都具备独特的父类。

角色:工厂角色、形象产品角色、具体产品角色

代码如下

形象产品角色

public interface Chart {public void display();
}

具体产品角色

public class LineChart implements Chart{public LineChart() {System.out.println("创立条状图");
    }

    @Override
    public void display() {System.out.println("显示条状图");
    }
}


public class PieChart implements Chart {public PieChart() {System.out.println("创立饼状图");
    }

    @Override
    public void display() {System.out.println("显示饼状图");
    }
}

工厂角色

public class ChartFactory {public static Chart getChart(String type) {
        Chart chart = null;
        if ("pie".equalsIgnoreCase(type)) {
            // 创立饼状图
            System.out.println("创立饼状图");
            chart = new PieChart();} else if ("line".equalsIgnoreCase(type)) {
            // 创立条状图
            System.out.println("创立条状图");
            chart = new LineChart();}
        return chart;
    }
}

客户端

public class Client {public static void main(String[] args) {/*  Chart chart = ChartFactory.getChart("line");
        chart.display();*/

        String chartType = XMLUtil.getChartType();
        Chart chart = ChartFactory.getChart(chartType);
        chart.display();}
}

因为在测试中须要去控制代码参数,违反开闭准则,能够将其拆解至配置文件中,失去一个工具类

<?xml version="1.0" encoding="UTF-8" ?>
<config>
    <chartType>line</chartType>
</config>
public class XMLUtil {public static String getChartType(){
        try {DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = factory.newDocumentBuilder();
            Document document;
            document = builder.parse("src//com//nq/SFP//config.xml");
            NodeList nodeList = document.getElementsByTagName("chartType");
            Node node = nodeList.item(0).getFirstChild();
            String chartType = node.getNodeValue().trim();
            return chartType;
        } catch (Exception e) {e.printStackTrace();
            return null;
        }
    }
}

长处:

  1. 对象创立与应用的拆散
  2. 缩小简单的类名应用
  3. 进步零碎灵活性

毛病:

  1. 工厂类一旦职责过重,整个零碎都要受到影响
  2. 减少了零碎的复杂程度和了解难度
  3. 不利于零碎的扩大和保护

实用场景:

  1. 工厂类负责创立的对象比拟少,不会造成工厂办法中的业务逻辑过于简单。
  2. 客户端只晓得传入工厂类的参数,对于如何创建对象并不关怀。

正文完
 0