设计模式工厂模式
简介
工厂模式是创建型模式的一种,也是里面需要注意的点最少的一种设计模式。通常来说,工厂模式有简单工厂、工厂方法和抽象工厂三种,其中前两种实现较为简单,后面一种比较复杂,这里先将简单工厂和工厂方法放一起,抽象工厂单独写一篇。 简单工厂
简单工厂适用于工厂类型确定的情况,在工厂中通过传入的类型来创建对应的对象。传统的写法如下(以创建各种水果为例): 1.首先定义水果的接口和方法: public interface Fruit { String getType(); }
2.定义实现类(这里定义了Circle和Square) public class Apple implements Fruit{ @Override public String getType() { return "apple"; } } public class Pear implements Fruit{ @Override public String getType() { return "pear"; } }
3.定义一个跟图形映射的静态常量(非必须,本人习惯,这样可以避免魔鬼字符串,并且方便代码重构) public interface Type { String APPLE = "apple"; String PEAR = "pear"; }
4.定义图形工厂 public class FruitFactory { public static Fruit createFruit(String type) { if (type.equals(Type.PEAR)) { return new Pear(); } else if (type.equals(Type.APPLE)) { return new Apple(); } return null; } }
5.客户端调用 public class Test { public static void main(String[] args) { Fruit fruit = FruitFactory.createFruit(Type.APPLE); System.out.println(fruit.getType());//apple Fruit fruit1 = FruitFactory.createFruit(Type.PEAR); System.out.println(fruit1.getType());//pear } } 关于简单工厂
简单工厂应该是设计模式中最简单的一种,能满足一部分需求。该工厂最大的一个问题是违反了开闭原则,比如我现在要增加另一种水果,则必须在FruitFactory类中去增加,会修改这个类,我们辛辛苦苦加班写的代码,肯定是不想被别人去修改的。 工厂方法
如果简单工厂能满足我们的需求,就没有必要上工厂方法了,因为工厂方法会创建多个工厂,无疑增加了我们的维护成本。对于工厂方法,我们还是以创建水果为例,假设我们的苹果和梨有两种,分别时南方的和北方的,此时我们需要南方水果工厂来创建南方的水果,北方的水果工厂来创建北方的水果。步骤如下: 1.定义水果的接口: public interface Fruit { String returnType(); }
2.定义南方和北方苹果和梨,实现Fruit接口 public class NorthApple implements Fruit{ @Override public String returnType() { return "apple from north"; } } public class NorthPear implements Fruit{ @Override public String returnType() { return "pear from north"; } } public class SouthApple implements Fruit{ @Override public String returnType() { return "apple from south"; } } public class SouthPear implements Fruit{ @Override public String returnType() { return "pear from south"; } }
3.定义生产水果的工厂接口 public interface FruitFactory { Fruit createFruit(String type); }
4.定义南方和北方的水果工厂,实现FruitFactory public class NorthFruitFactory implements FruitFactory{ @Override public Fruit createFruit(String type) { if (type.equals(Type.APPLE)) { return new NorthApple(); } else if (type.equals(Type.PEAR)) { return new NorthPear(); } return null; } } public class SouthFruitFactory implements FruitFactory{ @Override public Fruit createFruit(String type) { if (type.equals(Type.APPLE)) { return new SouthApple(); } else if (type.equals(Type.PEAR)) { return new SouthPear(); } return null; } }
5.客户端调用 public class Test { public static void main(String[] args) { FruitFactory fruitFactory = new SouthFruitFactory(); Fruit fruit = fruitFactory.createFruit(Type.APPLE); System.out.println(fruit.returnType());//apple from south System.out.println("-----------------------------"); FruitFactory fruitFactory1 = new NorthFruitFactory(); Fruit fruit1 = fruitFactory1.createFruit(Type.PEAR); System.out.println(fruit1.returnType());//pear from north } }
机构论市新能源等成长赛道受阻低估值板块迎来配置良机巨丰投顾新能源等成长赛道受阻低估值板块迎来配置良机对于新能源赛道的下跌,一方面是宏观因素,主要还是美联储加息预期下科技股承压,进而对A股成长股的压制另一方面,产业上看,2021年1
人工耳蜗是怎么回事?谢谢邀请!简单来说,人工耳蜗是一种人造的具有人耳功能装置。是一种能将声音转换成电流并被听觉神经感应到的声电装置。其工作原理为麦克风接受声音信号后,将其通过言语转换器进行数字编码,再
全中国用什么牌子手机的最多?蓝厂和绿厂(vivo和OPPO)如果论蓝厂和绿厂的终端店数量,应该是当之无愧的第一,尤其在二三线城市以及县级城市,覆盖率惊人,自然用户也就最多。很多人可能以为现在的人手机都是在网上
低调跌至2119元,颜值最高的小米手机,如今还值得考虑吗?感谢邀请低调跌至2119元,颜值最高的小米手机,如今还值得考虑吗?如果你说的是CIVI我觉得还不错,值得去考虑。毕竟走颜值系列的机型,基本上配置都是如此。之前的小米只是没有重视这个
两年前发布的华为Mate40Pro,放在2022年,算什么级别的手机?这段时间大家都把目光放在一个接一个发布的骁龙8Gen1旗舰手机上,对之前发布的老旗舰正在渐渐遗忘,比如华为Mate40Pro5G这款手机,它发布于2020年底,从时间上来说,这款手
这台iPhone13Pro只要5500元,但坚决不能买!容易被反锁今天网友给我发来几张照片,让我帮忙看看这台iPhone13Pro能不能买。这台iPhone13Pro的价格非常便宜,只要5500元。只看描述就知道这台iPhone13Pro不能买(
iOS15。2到底值不值得升级?不吹不黑,全谈真实使用感受分享手机小技巧,传递科技新知识,大家好,欢迎来到科技办公室!距离上一次苹果iOS系统更新,已经是20多天之前了,经过这么长时间的体验,很多朋友还在纠结,iOS15。2到底值不值得升
中国网络去依附的思考近期有网红和专家大讲2022年中美网络战争,他们的逻辑距离学术实在太过遥远,没有令人信服的事实奠基,实属纯粹的商业行为。中美之网络问题无限错综复杂,作为一名研究美国Internet
在公司用手机通过4G网络,上网内容可能被公司监控吗?在公司用手机通过4G网络上网,上网内容可能被公司监控吗?计算机网络学习从入门到精通通过4G聊微信,逛淘宝等,公司有可能通过技术手段监控到吗?如果视频监控也算技术手段,公司可以监控到
第三代iPhoneSE新机曝光,SE2沦为牺牲品价比百元机1月9日,据彭博社Gurman报道,苹果已经在计划2022年的首场发布会。他认为,苹果目前正在为3月或4月的发布会做准备,届时将推出支持5G网络的iPhoneSE机型。在最新一期的
对付骗子神器骗子太多了,没证据怎么办,不如佩戴随身录像机,走到哪里录到哪里!这样就有证据了。专业录像机1080P摄像机背夹录音笔录像神器执法记录仪高清防抖摄影机骑行DV家用设备运动相机摄影头一