【设计模式修炼】第三章 :家族编程大比开始,比赛中领悟《工厂模式》

导读:本篇文章讲解 【设计模式修炼】第三章 :家族编程大比开始,比赛中领悟《工厂模式》,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

 萧氏一族从古至今每三年举行一次编程大比,为的就是在激励家族子弟加快编程功法的修炼,并且通过比赛筛选出家族中的天才,从而对这些天才进行重点培养。

 遥想萧炎十岁之前也曾参加过一次家族编程大比,并且在比赛中击败了无数年龄大于自己的族中天骄,极负萧氏第一天才盛名。之后不久萧炎便由天才成为人人不齿的废材,沉寂了好几年。

这次的家族编程大比,萧炎相信自己能够取得很好的成绩,但是对于能否夺得大比第一,他还是没有多大把握。因为他的沉寂了太久,虽然打下了无敌根基,但是境界上仍比同龄人相差不少。

 正当萧炎发愁如何提升实力,在家族大比中取得第一时,扳指中的java扎老突然飘出,吓了萧炎一跳。
“是不是在发愁如何在比赛中夺得第一?”扎老仿佛看透了萧炎的内心,开门见山的问道,“我倒是有一个办法,只要你将这部《工厂模式》领悟,在比赛中夺得第一,一雪前耻应该不成问题”。

 萧炎闻言不禁大喜,连忙将扎老传来的《工厂模式》接过,迫不及待的打开翻阅起来:
在这里插入图片描述

《工厂模式》

第一篇:什么是工厂模式

工厂模式是一种非常常用的创建型设计模式,其提供了创建对象的最佳方式。在创建对象时,不会对客户端暴露对象的创建逻辑,而是通过使用共同的接口来创建对象。

第二篇:工厂模式的优点

解耦:将对象的创建和使用进行解耦
简单复用:对于一些很复杂的对象,通过工厂模式可以简单地调用创建方法就可以重复创建此种对象
方便维护:对象的创建统一由工厂进行管理,在对象创建发生变化时,只需要维护该工厂即可。

第三篇:简单工厂模式

所谓简单工厂模式,简单来讲就是:

  1. 有一种不同厂家的产品,如苹果手机,华为手机。
  2. 有一个工厂,可以生产你想要的手机
  3. 工厂中有一个创建方法,根据传入的参数,返回不同厂家的产品。比如你传入“苹果”,该方法就生产一个苹果手机,你传入“华为”,该方法就生产一个华为手机。

这种生产手机的模式就是简单工厂模式
通过调用工厂类的创建方法,该方法中根据传入的参数返回指定类型的产品。

第四篇:工厂模式

上面介绍了简单工厂模式,那么工厂模式呢?
就是不需要在一个工厂类中靠传递参数来区分返回哪种厂家的手机。而是每个厂家建一个工厂,需要哪种手机,就让哪家的手机工厂创建。
比如我需要一部苹果手机,就调用苹果手机工厂的创建方法,它就给我做出一部苹果手机来了

第五篇:抽象工厂模式

抽象工厂模式和工厂模式几乎是差不多的,它们的区别就是华为工厂和苹果工厂不仅生产手机,还生产电脑,涉及多个产品

附录:代码实现

产品–手机:

手机基类

public abstract class Phone {
    public Phone(String name, Date createdTime) {
        System.out.println("这是一部"+name+"手机");
        System.out.println("生产日期:"+createdTime);
    }
}
  1. 苹果手机
public class ApplePhone extends Phone {
    public ApplePhone() {
        super("苹果", new Date());
    }
}
  1. 华为手机
public class HuaweiPhone extends Phone {
    public HuaweiPhone(){
        super("华为",new Date());
    }
}

产品–电脑

电脑基类

public abstract class Computer {
    public Computer(String name, Date createdTime) {
        System.out.println("这是一部"+name+"电脑");
        System.out.println("生产日期:"+createdTime);
    }
}
  1. 苹果电脑
public class AppleComputer extends Computer {
    public AppleComputer() {
        super("苹果", new Date());
    }
}
  1. 华为电脑
public class HuaweiComputer extends Computer {
    public HuaweiComputer(){
        super("华为",new Date());
    }
}

简单工厂模式

工厂内部if判断要生产哪种产品

  1. 简单工厂类
public class SimplePhoneFactory {
    public Phone createPhone(String phoneName) {
        if ("huawei".equals(phoneName)) {
            return new HuaweiPhone();
        } else if ("apple".equals(phoneName)) {
            return new ApplePhone();
        }
        return null;
    }
}
  1. 使用案例
public class Client {
    public static void main(String[] args) {
        SimplePhoneFactory factory = new SimplePhoneFactory();
        Phone applePhone = factory.createPhone("apple");
        Phone huaweiPhone = factory.createPhone("huawei");
    }
}

运行得到
在这里插入图片描述

工厂模式(只生产一种产品:手机)

  1. 工厂基类
public abstract class PhoneFactory {
    public abstract Phone createPhone();
}
  1. 华为工厂
public class HuaweiFactory extends PhoneFactory{
    @Override
    public Phone createPhone() {
        return new HuaweiPhone();
    }
}
  1. 苹果工厂
public class AppleFactory extends PhoneFactory{
    @Override
    public Phone createPhone() {
        return new ApplePhone();
    }
}
  1. 使用
public class Client {
    public static void main(String[] args) {
        PhoneFactory appleFactory = new AppleFactory();
        Phone applePhone = appleFactory.createPhone();
        PhoneFactory huaweiFactory = new HuaweiFactory();
        Phone huaweiPhone = huaweiFactory.createPhone();
    }
}

运行得到:
在这里插入图片描述

抽象工厂模式

上面的两种模式只生产手机一种产品,而抽象工厂模式生产多种产品,如手机和电脑

  1. 抽象工厂基类
public abstract class AbstractFactory {
    public abstract Phone createPhone();
    
    public abstract Computer creatComputer();
}
  1. 苹果工厂类
public class AppleFactory extends AbstractFactory {
    @Override
    public Phone createPhone() {
        return new ApplePhone();
    }
    
    @Override
    public Computer creatComputer() {
        return new AppleComputer();
    }
}
  1. 华为工厂类
public class HuaweiFactory extends AbstractFactory {
    @Override
    public Phone createPhone() {
        return new HuaweiPhone();
    }

    @Override
    public Computer creatComputer() {
        return new HuaweiComputer();
    }
}
  1. 调用工厂方法生产手机和电脑
public class Client {
    public static void main(String[] args) {
        AbstractFactory appleFactory = new AppleFactory();
        Phone applePhone = appleFactory.createPhone();
        Computer appleComputer = appleFactory.creatComputer();

        AbstractFactory huaweiFactory = new HuaweiFactory();
        Phone huaweiPhone = huaweiFactory.createPhone();
        Computer huaweiComputer = huaweiFactory.creatComputer();
    }
}

运行效果:
在这里插入图片描述

 萧炎翻阅完毕,赶紧将内容记在心中。距离家族编程大比的时间仅剩三天,萧炎也只能在这三天中拼命修炼《工厂模式》,奈何时间太短,萧炎总觉得有些东西难以明悟,希望在比赛中借助比赛的磨练能够掌握这工厂模式。
 终于到了家族编程大比,凭借萧炎掌握的《七大设计原则》,他就已经打败诸多家族子弟,晋级8强。之后又是倚仗《单例模式》打败家族天骄大长老的孙子萧鼎和二长老的宝贝孙女萧月儿,进入决赛。
 然而决赛中的对手则是家族太上长老的关门弟子萧剑,此人编程讲究快准狠,无论是代码质量还是编码的速度,都无与伦比,已经隐隐超过萧炎一头。萧炎面对题目,尽管已经早已编写出一套解决方案,但是他明白这套代码攫夺无法打败萧剑。
 萧炎迅速整理感悟比赛中的经验收获,希望借此明悟《工厂模式》。“看来上天还是更眷恋我萧炎啊”萧炎在冥思一刻钟之后,嘴角终于漏出一丝不可查觉的微笑。
在这里插入图片描述

 《工厂模式》已经练成,萧炎凭借优秀的设计模式,最终打败萧剑,夺得了本次家族编程大比的头筹。
 “听说此次比赛,第一名奖励可是格外的丰厚,与往年不可相提并论”,想到这,萧炎不禁心中一阵激动。
 …

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/71742.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!