zoukankan      html  css  js  c++  java
  • 工厂模式总结

    学习工厂模式

    一、为什么要使用工厂模式?

    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{
    
    }
    View Code
    /**
     * 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();
        }
    
    }

    反思--------------------->如果用工厂方法模式达到这样的效果的话,是不是会产生更多的工厂类,网上很多人都是说多个一个产品多个系列就用抽象工厂,确实会简化很多,但是感觉都能实现.抽象工厂会减少工厂类的创建,,本质上好像没什么差别,(隐藏对类的创建).工厂方法模式符合开闭原则,抽象工厂就破坏了这个原则.

    告一段落!

  • 相关阅读:
    课堂练习求环整数组中最大子数组之和
    学习进度第7周
    声明
    最大数
    学习进度02
    构建之法阅读笔记02
    学习进度01
    课堂练习之《哈利波特》
    《构建之法》阅读笔记06
    寻找水龙王2
  • 原文地址:https://www.cnblogs.com/jinjian91/p/8540302.html
Copyright © 2011-2022 走看看