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();
        }
    
    }

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

    告一段落!

  • 相关阅读:
    [Maven]自定义Archetypes
    [集合]LinkedList
    [集合]Arraylist
    [数据结构与算法]最长有效括号32
    [数据结构与算法]深度优先搜索dfs和广度优先搜索bfs
    [Vim] 光标移动到行首、行尾
    [数据结构与算法]给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
    [数据结构与算法]求给定二叉树的最小深度。最小深度是指树的根结点到最近叶子结点的最短路径上结点的数量。
    IDEA 自动设置compile target变成1.5
    【Java基础】sun.misc.BASE64和Java 8 java.util.Base64区别
  • 原文地址:https://www.cnblogs.com/jinjian91/p/8540302.html
Copyright © 2011-2022 走看看