前言:不断学习就是程序员的宿命
一、概述
案例需求:一个手机的项目:要便于手机种类的扩展,便于维护
(1)手机的种类很多(比如华为、小米、oppo等)
(2)手机的制作(prepare,produce,box)
(3)完成手机店订购的功能
二、传统模式
public class OrderPhone { // 构造器 public OrderPhone() { Phone phone = null; String orderType; // 订购手机的类型 do { orderType = getType(); if (orderType.equals("xiaomi")) { phone = new XiaomiPhone(); phone.setName(" 小米手机 "); } else if (orderType.equals("huawei")) { phone = new HuaweiPhone(); phone.setName(" 华为手机 "); } else if (orderType.equals("pepper")) { phone = new OppoPhone(); phone.setName("oppo手机"); } else { break; } //输出pizza 制作过程 phone.prepare(); phone.produce(); phone.box(); } while (true); } // 写一个方法,可以获取客户希望订购的手机种类 private String getType() { try { BufferedReader strin = new BufferedReader(new InputStreamReader(System.in)); System.out.println("input 手机 种类:"); String str = strin.readLine(); return str; } catch (IOException e) { e.printStackTrace(); return ""; } } }
分析:
(1)优点:容易理解,简单易操作
(2)缺点:违反了设计模式的OCP原则(对扩展开放,对修改关闭)当我们给类增加新功能的时候,尽量不修改代码或者尽可能少修改代码
(3)例如此时要新增加一个手机种类(荣耀手机)则需要新增一个手机类,而且只要是订购手机的代码都要修改
三、简单工厂模式
①简单工厂模式属于创建型模式,是工厂模式的一种。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单使用的模式。
②简单工厂模式:定义了一个创建对象的类,由这个类来封装实例化对象的行为
③在软件开发中,当我们会用到大量的创建某种、某类或某批对象时,就会使用到工厂模式。
改进:基于传统模式修改,把创建Phone对象封装到一个类中,这样有新的手机类时只需要修改该类即可,其他有创建到Phone对象的代码就不用修改了,改进后的uml类图
public class SimpleFactory { //简单工厂模式 也叫 静态工厂模式 public static Phone createPhone(String orderType) { Phone phone = null; System.out.println("使用简单工厂模式"); if (orderType.equals("xiaomi")) { phone = new XiaomiPhone(); phone.setName(" 小米手机 "); } else if (orderType.equals("huawei")) { phone = new HuaweiPhone(); phone.setName(" 华为手机 "); } else if (orderType.equals("pepper")) { phone = new OppoPhone(); phone.setName("oppo手机"); } return phone; } }