范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

三种工厂模式学习

  工厂模式为什么要使用工厂模式
  先看下面一段代码 public class SendMessageContrller {  //    @Autowired //    private Producer producer;      public void sendMsg(String msg) throws Exception {         Producer producer = new Producer();         producer.sendByExchange("hi");     } }
  我们常规的创建对象的方 new关键字 反射机制创建对象
  那么这么做的 缺点 是什么呢? 对象创建和对象使用使用的职责耦合在一起,违反单一 原则; 当业务扩展时,必须修改代业务代码,违反了开闭原则;
  我们可以使用工厂模式来创建对象,那么 工厂模式 有什么 优点 把对象的创建和使用的过程分开,对象创建和对象使用使用的职责解耦; 如果创建对象的过程很复杂,创建过程统一到工厂里管理,既减少了重复代码,也方 便以后对创建过程的修改维护; 当业务扩展时,只需要增加工厂子类,符合开闭原则;
  工厂模式分为三种 简单工厂 工厂模式 抽象工厂 简单工厂
  首先我们要生产的产品: public interface Fruit {      int price();     void draw();      }  public class Banana implements Fruit {     private int price = 60;     @Override     public int price() {         return price;     }      @Override     public void draw() {         System.out.print("仙人蕉");     }      public void setPrice(int price) {         this.price = price;     } }
  简单工厂类: /**  * @Author: jimmy  * @Date: 2021/9/15 14:45  * @Description:  *   简单工厂 - 静态工厂模式  */ public class StaticFactory {          // 产品标志     public static final int TYPE_APPLE = 1;     public static final int TYPE_ORANGE = 2;     public static final int TYPE_BANANA = 3;      public static Fruit getFruit(int type){         if(TYPE_APPLE == type){             return  new Apple();         } else if(TYPE_ORANGE == type){             return new Orange("Peter",80);         } else if(TYPE_BANANA == type){             return new Banana();         }         return null;     }      /**      * 多方法工厂      * @return      */     public static Fruit getFruitApple(){         return new Apple();     }      public static Fruit getFruitOrange(){         return new Orange("Peter",80);     }      public static Fruit getFruitBanana(){         return new Banana();     } }
  工厂测试类: public class FactoryTestClient {      public static void main(String[] args) {          System.out.println("--- 简单工厂模式 ---");         // 传入香蕉的标志,获取香蕉实例         Fruit fruit = StaticFactory.getFruit(StaticFactory.TYPE_BANANA);         fruit.draw();         System.out.println( fruit.price());     } }
  输出结果:
  --- 简单工厂模式 --- 仙人蕉60
  可以看到简单工厂有 3个角色 Factory:工厂类,简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。 IProduct:抽象产品类,简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。 Product:具体产品类,是简单工厂模式的创建目标。
  简单工厂模式的优缺点
  优点: 客户端无需知道具体的创建产品逻辑,只需要知道具体参数即可通过简单工程获取实例 实现了创建和应用的解耦
  缺点: 所有的产品都集中在一个工厂中,一旦不能正常工作,整个系统都要受到影响 系统的扩展相对困难,一旦添加新的产品需要修改工厂的逻辑来解决新产品,这就破坏了开闭原则.产品较多的时候也容易造成混乱 使用了静态工厂方法,造成工厂角色无法形成基于继承的等级结构 工厂模式
  工厂方法模式属于类的创建型模式又被称为多态工厂模式。工厂方法模式的意义在于定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,仅负责声明具体工厂子类必须实现的接口。这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。
  先上代码:
  工厂类: // 工厂父类(接口) public interface FruitFactory {     public Fruit getFruit(); }  // 具体产品对应的工厂 public class AppleFactory implements FruitFactory{     @Override     public Fruit getFruit(){         return new Apple();     } }
  产品类(父类Fruit上面已经展示了) public class Apple implements Fruit {     private int price = 100;      public Apple(){}      public Apple(int price){         this.price = price;     }      @Override     public int price() {         return price;     }      @Override     public void draw() {         System.out.print("苹果红富士");     }      public void setPrice(int price) {         this.price = price;     } }
  测试类 public class FactoryTestClient {      public static void main(String[] args) {                  System.out.println("--- 工厂模式 ---");         FruitFactory fruitFactory = new AppleFactory();         Fruit f = fruitFactory.getFruit();         f.draw();         System.out.println(f.price());      } }
  输出结果:
  --- 工厂模式 --- 苹果红富士100
  工厂模式角色 IFactory(Creator):抽象工厂类,描述了工厂的公共方法 Facotry(Concrete Creator): 具体创建者 IProduct(Product):抽象产品类,简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。 Product(Concrete Product):具体产品类,是简单工厂模式的创建目标。
  优缺点
  优点: 更加符合开闭原则,新增产品的时候只需要增加相应的产品和工厂类即可 符合单一职责,每个工厂仅负责创建单一产品 不再使用静态方式,这样可以使用继承等结构
  缺点: 扩展需新增的内容较多,产品和工厂都要增加会增加系统的类数量 抽象工厂
  不废话直接上代码 public abstract class AbstractFactory {     // 获取水果     public abstract Fruit getFruit();     // 打包水果     public abstract Bag getBag(); }  public class OrangeFactory extends AbstractFactory{     @Override     public Fruit getFruit() {         return new Orange("非鸽传书", 5);     }      @Override     public Bag getBag() {         return new OrangeBag();     } }  /**  * 包装接口  */ public interface Bag {     void pack(); }  /**  * 桔子包装  */ public class OrangeBag implements Bag {     @Override     public void pack() {         System.out.print("--桔子使用网兜包装");     } }
  Test public class FactoryTestClient {      public static void main(String[] args) {          AbstractFactory factory = new OrangeFactory();         Fruit of = factory.getFruit();         of.draw();         Bag bag = factory.getBag();         bag.pack();     } }
  输出:
  --- 抽象工厂模式 --- 砂糖桔--桔子使用网兜包装
  抽象工厂角色 AbstractProduct(抽象产品类):需要创建的产品的抽象类。 ConcreteProduct(具体产品类):为实现抽象产品的某个具体产品类。 AbstractFactory(抽象工厂类):工厂模式方法核心,创建一系列产品对象。 ConcreteFactory(具体工厂类):实现抽象工厂中定义的创建产品的方法。
  抽象工厂在针对产品簇的时候比较常用,与工厂模式区别在于将抽象工厂定义为抽象类而不是接口,这样就规范了具体产品类的基本制造产品流程. 三种模式简单对比
  类型
  定义
  用法
  使用方式
  简单工厂模式
  一个用于创建对象的接口,让子类决定实例化那个类
  生成一个复杂对象
  工厂参数传递类型获取对应产品
  工厂模式
  一个用于创建对象的接口,让子类决定实例化那个类
  生成一个复杂对象
  使用对应产品的类型的工厂创建产品
  抽象工厂模式
  它为创建一组相关或者是相互依赖的对象提供一个接口
  生成一组复杂对象
  使用对应工厂创建一组产品

全新玲珑ID设计音质再升级,魅族POP3打造入门级TWS耳机新标准TWS耳机,应该是现在大部分人出行必备的利器吧!没错,由于其便携和易用性,成为了我们通勤旅途路上的好伙伴。目前,市面上的TWS耳机可以说是琳琅满目,且价格功能让人看得眼花缭乱,一不真HIFI级的真无线耳机魔浪HiFiPods还记得数年前,铁三角森海这些动不动几千甚至几十万元级的HIFI有线耳机叱诧风云,让我们这些普通小白们摸着羞涩的腰包,渴望而不可及的时代吗?在那个时代,仿佛即使是有线耳机,咱们这些使你心目中的大数据是什么样子的?您好,我是数据僧,在数据行业从业5年。我心目的中的大数据,在万物互联的情况下,同时每个人的个人信息能得到很好的保护。通过大数据生产出来的工具,应用遵循道德标准,合理的商业竞争标准,有什么打电话好用的手机耳机?帮忙推荐一下,最好不是蓝牙的?由于现在很多手机都去掉了3。5mm耳机接口,所以选择蓝牙无线耳机是最理想的选择。但因为题主要求尽量推荐有线的,所以就有必要再顺着这个方向去延展一下。其实如果题主是iPhone的用户vivo开发者大会将于12月16日举行从1到正无穷IT之家12月6日消息,vivo正式宣布2021开发者大会将于12月16日上午正式召开,主题是从1到正无穷,设有1个主会场6个专场,整体将采用线上直播的方式。在主会场当中,vivo联想事件让你联想到了什么?任何企业法人都离不开毛泽东思想的深入学习和接受教育,否则知识分子也容易走向国家和人民的对立面,至于那些草根创业者,就更需要警钟长鸣,一旦离开了国家和人民的监督,都容易走向思想的堕落红米Note11Pro充电速度全面测试,67W65W充电头快到没朋友红米Note11Pro充电速度测试总结除了原装120W,还试了小米67W65W氮化镓小米33W30W22。5W充电头。65W完美兼容快速,有点让人期待下一代67W但33W以下兼容不联想真的有问题吗?用老百姓的话说,趁乱把国家的东西全部放进自己的口袋,尝到甜头后一发不可收拾。台底下的交易多了,现在被放到台面上了,在黑暗中生存了那么多年,能见光吗?最坏的是他这一套东西,影响了许多教师如何投屏手写讲课?希沃白板5软件这个软件有电脑端(WINDOWS系统)和移动端(苹果和安卓),所有功能全部免费。一般情况下,电脑安装希沃白板软件,电脑屏幕内容同步输出到任何品牌的电子白板上,通过电子魅族究竟有什么魔力,让人又爱又恨自智能手机这个概念出世以来,这块市场就从来没有安静过,不断有新的品牌进入,稍有不慎便产生了出局者。前前后后10年,霸主从来没有被谁垄断过,前有苹果三星,后有小米OV华为。但就是在这推动智能时代传统产业数字化转型近年来,随着云计算大数据物联网等新一代信息技术蓬勃发展,人工智能技术迎来爆发式增长阶段。基于深度学习的人工智能算法在模式识别自然语言处理等方面的表现开始接近甚至超过人类智能,并已被
iPhone13这一功能在乔布斯时代就有了,苹果果粉都不舍得去掉说起苹果iPhone手机,除了性能的优越,还有一些灵魂设计深深吸引果粉,让果粉爱不释手,比如iOS系统,而除了这个目前安卓无法超越的系统,苹果还有一个小设计非常实用,那就是一键静音苹果X有哪些不为人知的特殊功能?感谢您的阅读!iPhoneX有哪些不为人知的特殊功能?实际上,在iPhone手机中有很多的功能值得我们去借鉴,你也会发现在iPhoneX之后有很多手机开始致敬它,它也带来了很多新的ColorOS12正式发布,1000项功能的升级优化,刷新手机新体验在9月16日的OPPO秋季发布会上,ColorOS12系统如期而至,这个系统继承了自ColorOS6以来的无边界设计理念,这使得整个界面UI设计看着非常眼熟,OPPO还在这个系统上仅支持4G功能,华为P50依然热销,为什么用户忠诚度这么高?支持的不仅仅是一部手机,还因为华为有一种精神,不屈不挠的精神,现在这种精神很少啦,大多数是为赚快钱。需要华为这种认真做科研的企业,我相信我们国家只有像华为这种企业越来越多才能真正成iPhone13系列跑分出炉CPU提升不大,还是熟悉的内存9月15日,我们迎来了传说中的十三香iPhone13系列新品。作为全新一代的iPhone,iPhone13自然搭载了目前最新的A15处理器,不过在发布会上,苹果却没有太多介绍这次的2。98万要驾照能上牌有保险四门四座新款雷丁芒果上市孩子开学了吧?油价又涨了吧?家里的车又限号了吧?单位的停车场又满了吧?别发愁,新能源电动老头乐为您解忧。放眼当前市场的新能源小车,有销量大杀四方的五菱宏光MINIEV支持快充的长安年轻人喜爱的懒人家电几十块就能解放双手都说8090后是压力最大的一代,他们不仅要面对时代下的快节奏生活,而且还要面对各种工作压力婚姻压力买房压力等等。而一些智能家电的诞生,不仅能够让这两代年轻人减轻一些生活上的烦恼解放不喜欢iPhone13,网友果断入手iPhone11Pro,却买到翻新机iPhone13发布之后,很多人说13真香,但有些人就是不喜欢iPhone13的外观。今天这位网友昨天看完发布会之后,就果断买了一台iPhone11Pro。他说虽然iPhone13滴滴司机收入那么高,为何都喊穷呢?头条关于滴滴的问题,更多是在暗示和鼓动。假如滴滴可以称作一个行业的话,那么决定这个行业发展的要素,一是供给量,二是价格。在此不谈价格,只谈无限的供给量,事实上造成供需失衡,高度内卷如果全市的出租车司机为了抵制共享电动车而集体罢工,你怎么看待这个问题?最讨厌的就是说什么趋势!你看看这医院一天急诊接待多少由于骑共享电动车受伤的人员!交警一天接待多少由于共享电动车造成的事故!说什么太方便了,确实是有点方便,但是不能牺牲大家的安全来使为什么滴滴打车司机和乘客显示的费用不一样?老司机都懂,乘客的价钱是实际价钱,司机这里显示的是乘客价钱扣掉20抽成后到手的钱,然后再减掉5毛就是自己的收入,不是什么套路,早就改了这个设定,这个很容易理解,有疑问么,这样能清晰