简单工厂模式
定义一个工厂类,他可以根据参数的不同返回不同的实例,被创建的实例通常都具有共同的父类。
简单工厂模式结构
-
Factory(工厂角色):简单工厂模式的核心,负责实现创建所有实例的内部逻辑。工厂类的创建产品类的方法可以被外界直接调用,创建所需的产品对象。
-
Product(抽象产品角色):是简单工厂创建的所有对象的父类,负责描述所有实例共有的公共接口。
-
ConcreteProduct(具体产品角色):是简单工厂模式的创建目标。
-
类图
自己理解:具体产品就是模板,抽象产品就是接口,工厂角色就是实例化对象。工厂调用接口,使用模板来new对象。
简单工厂模式应用实例
-
实例说明
设计一套图表库(柱状图、饼图、折线图等),通过设计不同参数来得到不同类型的图表。
-
实例分析
Factory角色为图表库(ChartFactory),Product角色为图表(Chart),ConcreteProduct角色为柱状图、饼图、折线图等。
-
实例类图
-
实例代码
-
Chart接口
public interface Chart { public void display(); }
-
PieChart和HistogramChart具体lei
public class PieChart implements Chart{ public PieChart(){ System.out.println("创建饼图"); } @Override public void display() { System.out.println("显示饼图"); } }
public class HistogramChart implements Chart{ public HistogramChart(){ System.out.println("创建柱状图"); } @Override public void display() { System.out.println("显示柱状图"); } }
-
ChartFactory类
public class ChartFactory { public static Chart getChart(String type){ Chart chart=null; if(type.equalsIgnoreCase("histogram")){ chart=new HistogramChart(); System.out.println("初始化设置柱状图!"); }else if(type.equalsIgnoreCase("pie")){ chart=new PieChart(); System.out.println("初始化设置饼图!"); }else if(type.equalsIgnoreCase("line")){ chart=new LineChart(); System.out.println("初始化设置折线图!"); } return chart; } }
-
Client(客户)类
public class Client { public static void main(String[] args) { Chart histogramchart; histogramchart=ChartFactory.getChart("histogram"); histogramchart.display(); System.out.println("----------"); Chart pieChart; pieChart=ChartFactory.getChart("pie"); pieChart.display(); System.out.println("----------"); } }
-
实验效果
创建柱状图 初始化设置柱状图! 显示柱状图 ---------- 创建饼图 初始化设置饼图! 显示饼图 ----------
-
-
简单工厂模式优缺点与适用环境
-
优点:实现了对象创建和使用分离;客户只需知道参数即可,不需类名;引入配置文件则不需要修改客户端代码即可修改。
-
缺点:职责过重,扩展性困难,不具备开闭原则。
-
适用环境:对象较少,客户端对如何创建对象不关心,知道相应参数。
-