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

三种工厂模式学习

  工厂模式为什么要使用工厂模式
  先看下面一段代码 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(具体工厂类):实现抽象工厂中定义的创建产品的方法。
  抽象工厂在针对产品簇的时候比较常用,与工厂模式区别在于将抽象工厂定义为抽象类而不是接口,这样就规范了具体产品类的基本制造产品流程. 三种模式简单对比
  类型
  定义
  用法
  使用方式
  简单工厂模式
  一个用于创建对象的接口,让子类决定实例化那个类
  生成一个复杂对象
  工厂参数传递类型获取对应产品
  工厂模式
  一个用于创建对象的接口,让子类决定实例化那个类
  生成一个复杂对象
  使用对应产品的类型的工厂创建产品
  抽象工厂模式
  它为创建一组相关或者是相互依赖的对象提供一个接口
  生成一组复杂对象
  使用对应工厂创建一组产品

数字中台重构企业业务与IT,云徙科技如何助力数字化转型9月25日,2020云徙数字创新年会在杭州召开。大会围绕全速重构,全面转型,与会嘉宾交流了各行业数字化转型的实践经验。作为中台的有力践行者,云徙科技率先将对中台的实践思考凝练于其产纯阳书评第419期中台实践一本优秀的中台书籍应该长什么样?我的体会是,一本优秀的中台书籍应该实现三个有,一是具有对中台大体正确的理解二是持有中台落地的具体思路三是拥有中台落地的真实实践。之所以这三个有这么重TOP1!百万读者疯抢中台实践,数字化解决方案第一书一大早醒来,小编我就惊呆了咱们的新书中台实践成功问鼎京东新书计算机榜第一名!!!自中台实践上市以来被各大企业CXO疯抢盛况堪比双十一!!感谢所有人的支持!!过去两年,大部分企业对中工信部授牌!云徙成为数字化人才实训基地11月3日4日,由工业和信息化部浙江省人民政府中国工程院在浙江省杭州市举办2020年中国服务型制造大会。服务型制造,是数字化进程中制造与服务融合发展的新型产业形态,是我国制造强国建客户锐减四成,汽车营销靠什么赢得市场?受经济下行影响,中国各行各业的景气度都到了历史低点。作为国民经济晴雨表的汽车行业自然不能幸免于难,正在经历前所未有的寒冬。伴随世界经济发展走向新周期,汽车营销同样也站在了演化的边缘云徙科技CEO包志刚营销数字化是道法术的三者统一不要浪费一场危机的机会。对于参与企业数字化转型的实践者们来说,危机之下藏着巨大的市场机会。在2020云徙数字创新年会上,云徙科技创始人兼CEO包志刚直言2020我见了很多企业家,发厉害!云徙科技荣登2020中国新基建创新力量榜单近年来,新基建应时代而生。云徙科技作为数字中台领导者,领先的企业数字化转型服务商,荣登创业邦2020中国新基建创新力量榜单!科技变革催生新的经济变革与社会变革。正如2020年,受大大江大河中国国企70年国企70年,一部辉煌史诗。来源88号实验室c01hr第一阶段从无到有(19501977)中国最早的国有企业的出现,可以追溯到上世纪50年代。新中国成立之后的1952年,政务院发布的数智中国行专题上线!走遍中国,涓滴成海发掘数字化新动能2021年,数字化转型来到了潮汐交替的一年。这一年我们能够看到的是,各方面对行业智能化升级数字化转型,数字经济与实体经济深度融合的推动力来到了史无前例的高度。旧有的理念产品与商业模80后农村小伙追星雷军造毛巾获千万投资后,狠赚1。6亿见过浓眉追星詹姆斯成其队友,见过粉丝追星林志颖成为其老婆的,但你一定没见过追星把自己变成富翁的。湖南就有这么一位80后的小伙子,追星雷军,当他成自己的偶像,经指点专注卖毛巾,还获得大叔变成小青年!ampampquot心脏ampampquot却变小了,全新日产奇骏还值得买吗?当本田CRV丰田RAV4荣放先后完成换代之后,已经在中国市场打拼7年的第三代日产奇骏也迎来了换代,由之前的油腻大叔形象变成了新时代小青年,在我看来,它的外观设计是非常成功的,但全系
大饱眼福了!跟着魅族去领略祖国的大好河山竟是这种体验眼看十月份也已经要到头了,不知道大家还是否记得魅族在国庆期间发起的一项魅族手机山河图的有奖征集活动呢?当时的要求的大家在国庆游玩期间,用魅族手机拍下国家的壮丽河山发到魅族微博去,然国庆假期,老爸给整了一款魅族18sPro,这几点很合意国庆假期,老爸终于同意给我换新手机了,这一次他选择的是前不久发布的魅族18sPro。讲真的,他选机的确让人看不懂,本以为会给我来个稍微大品牌一点,却没有想到是魅族家的。也不是说它名11月,阿拉伯联合酋长国的气温飚升到103华氏度距离气象冬天还有不到一个月的时间,但如果你身在阿联酋,你是不会感觉到的。本周伊始,该国气温达到了103华氏度(39。4摄氏度),创下了11月份的最高纪录。据报道,卡塔尔阿曼和伊朗的将国漫改编成真人版电视剧,实力验证次元壁不是没那么好突破的镇魂街这部由汪东城主演,这部是玄幻剧,还原的不可能很好,但是拍出来的也已经很好了。汪东城经常发自己cos的照片,确认过眼神,是二次元的人!端脑的真人版没有什么明星,虽然成绩不太好,游走在禁播边缘的这五部经典动漫,没看过的现在快点补番吧寒蝉鸣泣之时这部动漫中的女主古手梨花被评为最惨女主,内容容易让人一起不适,还会有压抑的感觉,看了很容易难过,所以这一部游走在禁播的边缘!Re从零开始的异世界生活莱月昴是这部动漫的男沙丘的建模分析证明,阿拉基斯是一个非常现实的系外行星科幻作家弗兰克赫伯特(FrankHerbert)以他创造的细节丰富的科幻世界而闻名。他的作品中最为出名的就是近期热播的同名改编电影沙丘。这部作品花了他六年时间才完成,像他的其他作品美国真正劲敌另有其人?基辛格连夜发出警告一旦开战就是毁灭尽管全球已经基本实现和平,但美俄之间的矛盾依旧是外界关注的重点,甚至还认为这两个国家是最有可能开战的两个国家。之所以如此,主要是因为俄罗斯的前身是苏联,而苏联是当时美国最大的敌人,名侦探柯南里的土豪,除了铃木财团,你还注意到谁非常有钱?名侦探柯南中有很多土豪,在剧情中也是经常见他们的私人飞机,参加各种宴会,飞艇,这些都是有钱人才会玩的,像园子家的铃木财团,更是首富级别啊!除了铃木财团,你还注意到谁非常有钱?铃木次美想要的芯片数据,三星正式摊牌,台积电的回应也来了芯片被称为工业粮食,小到智能穿戴设备大到航天航空,都离不开芯片的驱动,其重要性不言而喻。然而,老美近些年却不断修改芯片规则,不仅限制台积电ASML向我们自由出货,而且还邀请三星台积华为鸿蒙终于迎来首个手机队友在移动操作系统领域,谷歌安卓份额占比约75苹果ios约23,两家美企几乎垄断了全球市场。虽然我国市场每年能制造约6亿部手机,然而,却没有一款属于自己的国产系统,完全处于空白,潜在的三星反水,美国遭遇当头一棒美国妄图通过断供华为等中企芯片来遏制我国高科技的发展,没想到的是,这却激起了国内芯片市场的斗志,加速了中国芯崛起的步伐。同时,美修改芯片规则的行为,打破了全球芯片产业平衡,让本就捉