学习工厂模式
一、为什么要使用工厂模式?
1、解耦,工厂模式是为了隐藏new 对象的过程(对象创建的具体细节),由工厂去创建实例,这样即便以后你改了类,也不需要修改工厂创建类的相关代码;
2、面向接口编程(复用性强)
二、工厂模式的种类
简单工厂,工厂方法,抽象工厂
参考博客: http://blog.csdn.net/lqw05/article/details/51909449
区别1: 工厂方法是简单工厂的升级版,工厂方法符合 开闭原则(增加新工厂不改变原来的代码);
区别&&思考: 工厂方法和抽象工厂的区别?(本质上好像没什么区别)
以小米手机为例,现在需要产生小米手机2和小米3
/** * Created by Administrator on 2018/3/10. * 手机基类 */ @Data public class MobileDto { private String logo; private String maker; } /** * Created by Administrator on 2018/3/10. */ @Data public class XiaoMi2sMobile extends MobileDto{ } /** * Created by Administrator on 2018/3/10. */ @Data public class XiaoMi3Mobile extends MobileDto{ }
/** * Created by Administrator on 201
/** * Created by Administrator on 2018/3/10. * 抽象工厂 */ public abstract class AbstractMobileFactory { // 抽象类属性 public abstract MobileDto createXiaoMi3Mobile(); public abstract MobileDto createXiaoMi2sMobile(); } /** * Created by Administrator on 2018/3/10. */ public class XiaoMiMobileFactory extends AbstractMobileFactory { @Override public MobileDto createXiaoMi3Mobile() { System.out.println("我是小米手机3"); return new XiaoMi3Mobile(); } @Override public MobileDto createXiaoMi2sMobile() { System.out.println("我是小米手机2s"); return new XiaoMi2sMobile(); } }
/*
*8/3/10. * 工厂方法模式 */ public interface MobileFactory { MobileDto createMobile(); } /** * Created by Administrator on 2018/3/10. */ public class XiaoMi2sFactory implements MobileFactory { @Override public MobileDto createMobile() { System.out.println("我是小米手机2s"); return new XiaoMi2sMobile(); } } /** * Created by Administrator on 2018/3/10. */ public class XiaoMi3Factory implements MobileFactory { @Override public MobileDto createMobile() { System.out.println("我是小米手机3"); return new XiaoMi3Mobile(); } }
/** * Created by Administrator on 2018/3/10. *测试 */ public class test { public static void main(String[] args) { MobileFactory m=new XiaoMi2sFactory(); MobileDto mobileDto2s=new XiaoMi2sFactory().createMobile(); MobileDto mobileDto3=new XiaoMi3Factory().createMobile(); AbstractMobileFactory abstractMobileFactory = new XiaoMiMobileFactory(); mobileDto2s=abstractMobileFactory.createXiaoMi2sMobile(); mobileDto3=abstractMobileFactory.createXiaoMi3Mobile(); } }
反思--------------------->如果用工厂方法模式达到这样的效果的话,是不是会产生更多的工厂类,网上很多人都是说多个一个产品多个系列就用抽象工厂,确实会简化很多,但是感觉都能实现.抽象工厂会减少工厂类的创建,,本质上好像没什么差别,(隐藏对类的创建).工厂方法模式符合开闭原则,抽象工厂就破坏了这个原则.
告一段落!