zoukankan      html  css  js  c++  java
  • 设计模式(一)----工厂模式

    基本的业务逻辑的编写并不是难事,作为一个合格的程序员能够编写出易扩展,可维护,高内聚,低耦合的代码才是真正的能力。所以从今天开始会陆陆续续的研究一下设计模式。设计模式并不是针对编程语言,而是考察的编程的思想。


    • 设计模式中最简单的应该就是工厂模式了,在我们企业项目中工厂模式和单例模式也是应用最多的模式了。今天我们就简单的介绍一下工厂模式。都是个人总结,不喜勿喷!!!

    描述

    • 工厂模式就是简化了对象的构建。正常情况下我们在Java中是通过new来构建对象,但是有的对象可能需要设置一些默认值等等的额外操作。这个时候为了简化用户的操作我们引入了工厂模式的设计思想。工厂模式就是将构建对象的过程封装在工厂类中,我们需要具体的工厂类中的对象我们就可以通过工厂来获取了。提高了使用的灵活性。

    优点

    • 通过上面的描述我们能够轻松的发现工厂模式带来的好处。有了工厂模式我们构建对象不需要关注对象构建的过程,我们需要的对象只需要想工厂发出生产对象的指令就可以了。抛弃构建的复杂过程,增加代码的阅读性。

    情景再现

    • 工业时代到来之前我们的生产都是人工的,换句话说就是我们需要什么,我们需要自己动手去完成。而有了工厂之后就摆脱了自己的双手。比如说你现在是一家服装厂的老板,夏天来临你需要购进一批夏季服装。相信现在的你不可能自己动手去做衣服,都是通过跟服装厂联系,告诉服装厂你需要衣服的款式,一段时间后你就获得了这些你指定的衣服。至于这些衣服是如何实现的你根本不用关心。服装厂在这里就是我们工厂模式的工厂。

    分类

    • 工厂模式又细分为三种:简单工厂模式+工厂方法模式+抽象工厂模式

      • 简单工厂模式:
        简单工厂模式是我们上面的情景再现的情况,简单工厂就是说所有的细节都是依靠一个工厂统一完成,这种模式下工厂的压力特别大。

      • 工厂方法模式:
        工厂方法模式在上面情景的基础上将工厂进行了更改优化,之前工厂是一个工厂生产一年四季的衣服,现在抽象一个工厂类,在有四个工厂是该抽象工厂的具体实现类,这四个工厂具体分别负责生产春夏秋冬衣服。这样仍然是工厂模式,只不过相对简单工厂模式已经减轻了工厂的压力了。

      • 抽象工厂模式:
        抽象工厂模式在抽象方法模式的基础上有进行了强化,抽象方法中是一个具体工厂的实现类负责生产一种类型的衣服,而在抽象工厂模式下一个具体的工厂的实现类可以生产多个类别的衣服。这样更加的减轻服装厂的压力了。

    代码实现

    这里我们就实现简单工厂模式的代码,其他两种的模式知识在简单工厂模式的基础上进行工厂类的强化

    服装抽象类(Clothes)

    package zhangxinhua.JavaDesignDetails.工厂模式.features;
    
    public abstract class Clothes
    {
        //袖口的数量
        private int wristband=2;
        //领口的数量
        private int neckline=1;
        //穿衣方式
        public void hold()
        {
            System.out.println("我的穿衣方式是从领口");
        }
        public int getWristband()
        {
            return wristband;
        }
        public void setWristband(int wristband)
        {
            this.wristband = wristband;
        }
        public int getNeckline()
        {
            return neckline;
        }
        public void setNeckline(int neckline)
        {
            this.neckline = neckline;
        }
    
    
    }
    

    具体服装类一(AutumnCloth)

    package zhangxinhua.JavaDesignDetails.工厂模式.special;
    
    import zhangxinhua.JavaDesignDetails.工厂模式.features.Clothes;
    
    public class AutumnCloth extends Clothes
    {
    
        @Override
        public void hold()
        {
            System.out.println("我是秋装,我要倒着穿");
        }
    
    }
    

    具体服装类二(SpringCloth)

    package zhangxinhua.JavaDesignDetails.工厂模式.special;
    
    import zhangxinhua.JavaDesignDetails.工厂模式.features.Clothes;
    
    public class SpringCloth extends Clothes
    {
    
        @Override
        public void hold()
        {
            System.out.println("我是春装,我要从领口穿衣");
        }
    
    }
    

    具体服装类三(SummerCloth)

    package zhangxinhua.JavaDesignDetails.工厂模式.special;
    
    import zhangxinhua.JavaDesignDetails.工厂模式.features.Clothes;
    
    public class SummerCloth extends Clothes
    {
    
        @Override
        public void hold()
        {
            System.out.println("我是夏装,我要从怀口穿");
        }
    
    }
    

    工厂类(Clothfactory)

    package zhangxinhua.JavaDesignDetails.工厂模式.简单工厂模式.factory;
    
    import zhangxinhua.JavaDesignDetails.工厂模式.features.Clothes;
    import zhangxinhua.JavaDesignDetails.工厂模式.special.AutumnCloth;
    import zhangxinhua.JavaDesignDetails.工厂模式.special.SpringCloth;
    import zhangxinhua.JavaDesignDetails.工厂模式.special.SummerCloth;
    
    public class ClothFactory
    {
        public static Clothes createClothes(String type) throws Exception
        {
            Clothes clothes=null;
            switch (type)
            {
            case "spring":
                clothes=new SpringCloth();
                break;
            case "summer":
                clothes=new SummerCloth();
                break;
            case "autumn":
                clothes=new AutumnCloth();
                break;
            default:
                throw new Exception("目前不支持你指定的类型");
            }
            return clothes;
        }
    }
    

    客户端调用(client)

    package zhangxinhua.JavaDesignDetails.工厂模式.简单工厂模式.client;
    
    import zhangxinhua.JavaDesignDetails.工厂模式.features.Clothes;
    import zhangxinhua.JavaDesignDetails.工厂模式.简单工厂模式.factory.ClothFactory;
    
    public class client
    {
        public static void main(String[] args) throws Exception
        {
            System.out.println("工厂你给我一套春装");
            Clothes spring = ClothFactory.createClothes("spring");
            spring.hold();
            System.out.println("********************");
            System.out.println("工厂你给我一套秋装");
            Clothes autum = ClothFactory.createClothes("autumn");
            autum.hold();
            System.out.println("********************");
            System.out.println("工厂你给我一套夏装");
            Clothes summer = ClothFactory.createClothes("summer");
            summer.hold();
            System.out.println("********************");
        }
    }
    

    效果展示

    这里写图片描述


    总结

    • 设计模式的学习是潜移默化,学习设计模式不要急,成长是需要时间的,今天的努力,将来的一天终会回报。

    有需要源码的,或者有不理解,欢迎扫描左侧二维码,进群交流讨论。

  • 相关阅读:
    Android拍照+方形剪裁——附代码与效果图
    Caffe源代码中Solver文件分析
    Java学习笔记五(多线程)
    setTimeout和setInterval的区别
    javascript中this的妙用
    javascript基于原型的语言的特点
    css样式小技巧
    html块元素和内联元素
    怎么解决浏览器兼容性问题
    高效率、简洁、CSS代码优化原则
  • 原文地址:https://www.cnblogs.com/zhangxinhua/p/8299218.html
Copyright © 2011-2022 走看看