设计模式之——工厂方法模式_技匠而已的博客-程序员秘密

技术标签: 设计模式(GOF 23)  设计模式  

设计模式:

前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定。而是一套用来提高代码可复用性、可维护性、可读性、稳健性、以及安全性的解决方案

设计模式的本质是面向对象设计原则的实际运用,是对类的封装性、继承性和多态性以及类的关联关系和组合关系的充分理解。

正确使用设计模式具有以下优点:

  • 可以提高程序员的思维能力、编程能力和设计能力。
  • 使程序设计更加标准化、代码编制更加I程化,使软件开发效率大大提高,从而缩短软件的开发周期。
  • 使设计的代码可重用性高、可读性强、可靠性高、灵活性好、可维护性强。

详细工厂模式可参考————>简单工厂模式 中详细介绍

工厂方法模式

  • 用来生产同一等级结构中的固定产品(支持增加任意产品)

个人理解:

工厂方法模式是工厂的工厂的方法,比如一个手机店,同时出售,小米,华为,OPPO等手机——>但是进货是有各个手机工厂制造———>工厂制造是由各个品牌设计而出

那么,出售手机店就如同有一个价格的接口,各个厂商将商品标价

程序中的精髓——工厂的工厂接口方法,限定工厂的行为

/**
 * @Descrintion: 静态工厂方法——简单工厂模式【不修改代码的情况下做不到】
 * @version: 1.0
 */
public interface CarFactory {
    Car getCar();
}

工厂中实现工厂的方法,按规则制造

/**
 * @Descrintion:
 * @version: 1.0
 */
public class TeslaFactory implements CarFactory {

    @Override
    public Car getCar() {
        return new Tesla();
    }
}
/**
 * @Descrintion:模拟一辆车的简单属性
 * @version: 1.0
 */
public class WuLingFactory implements CarFactory {

    @Override
    public Car getCar() {
        return new WuLing();
    }
}

工厂制造的车的实体类

/**
 * @Descrintion:
 * @version: 1.0
 */
public class Tesla implements Car {
    @Override
    public void name() {
        System.out.println("特斯拉");
    }
}
/**
 * @Descrintion:模拟一辆车的简单属性
 * @version: 1.0
 */
public class WuLing implements Car {
    @Override
    public void name() {
        System.out.println("五菱宏光");
    }
}

然后用户进行购买

/**
 * @Descrintion:模拟顾客买车动作
 * @version: 1.0
 */
public class Consumer {
    public static void main(String[] args) {
        Car wuling = new WuLingFactory().getCar();
        Car tesLa = new TeslaFactory().getCar();
        wuling.name();
        tesLa.name();
/*
    如果未来出现更多的车,那么可以实现车工厂的工厂即CarFactory
    然后开立自己的品牌以及工厂,不对已经存在的工厂和品牌进行改变,更大的灵活性
 */
    }
}
如果未来出现更多的车,那么可以实现车工厂的工厂即CarFactory
然后开立自己的品牌以及工厂,不对已经存在的工厂和品牌进行改变,更大的灵活性

 

如果未来出现更多的车,那么可以实现车工厂的工厂即CarFactory
然后开立自己的品牌以及工厂,不对已经存在的工厂和品牌进行改变,更大的灵活性

 

如果未来出现更多的车,那么可以实现车工厂的工厂即CarFactory
然后开立自己的品牌以及工厂,不对已经存在的工厂和品牌进行改变,更大的灵活性

重要的事情说三遍

 

 

 

 

 

 

 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/L_fly_J/article/details/113732713

智能推荐

基础巩固-C++-存储持续性、链接性和作用域_链接性和作用域区别_叼奶嘴的锅包肉的博客-程序员秘密

#ifdef 和 #define经常在代码中会看到这两个预处理器的编译指令,ifdef的出现是为了防止源文件重复包含另一文件多次,所以在代码中经常会写 #ifdef COORDIN_H_ ... #endif 代码中的ifdef指的是如果定义过COORDIN_H_就让编译器跳过if块到达endif后面的一行,至于其中的COORDIN_H只是一个标识符,可以取任何名字作...

linux没有root权限如何安装软件,我如何安装没有root权限的软件包?_weixin_39939661的博客-程序员秘密

问题描述我在这台机器上没有root权限。我想知道是否有办法下载Ubuntu软件包并将它们安装为non-root?可能在我的~/bin或~/usr/share或类似的东西?这会起作用吗?最佳解决办法Apt不直接支持它,但有办法做到这一点。一种是使用schroot创建non-root chroot。这是一个有点involved process,但你应该能够找到社区帮助为许多开发人员设置chroot环境...

银联Applepay_测试参数切换正式环境操作指南_ios apple pay 正式环境_Bloodyer的博客-程序员秘密

一、  流程简介下载CSR文件(银联平台)将CSR提交至苹果(苹果开发者会员中心)查看证书使用流程(证书上传至银联平台)替换证书(证书pfx及验签证书cer)服务端更换请求交易接口地址客户端mode改为00一、  详细说明1.下载CSR文件(选做)    登陆商户服务平台(https://merchant.unionpay.com/),用户名及密码见

️UNITY实战进阶-三维AABB包围盒详解-6_游戏包围盒检测示意图_Jerrt-J的博客-程序员秘密

前言 碰撞检测问题在虚拟现实、计算机辅助设计与制造、游戏、机器人等方面都有着广泛的应用,而包围盒算法是进行碰撞检测的重要方法之一。 而常见的包围盒有:AABB包围盒(Axis-aligned bounding box) 包围球(Sphere) OBB包围盒(Oriented bounding box) 凸包包围盒(Convex Hull) ...在Unity中的Collider包含: 介绍 在游戏中,为了简化物体之间的碰...

Python清空文件内容_墨痕诉清风的博客-程序员秘密

在处理完成任务后将结果输出到文件中,使用完文件内容后马上清空文件内的信息。open函数 w+参数用这个模式将任意类型文件打开,都会将其中所有内容都直接清除掉。不过该方法只能够对文本类型的文件进行操作,也就是可以用编辑器或记事本打开的文件,代码如下:方法二truncate(0)调用此方法,这个方法的作用是截断文件中指定位置后的字符。并且会将文件指针移动到这个位置上,之后写入数据就是从指针位置开始,那么它实际上起到的也是覆盖文件内容的作用。传入参数为0就表示从文件开头位置截断内容,字符索引0之后,包

到处是map、flatMap,啥意思?_flatmap是什么意思_Ricky的技术小站的博客-程序员秘密

  最近入职一个有趣的年轻同事,提交了大量大量的代码。翻开git记录一看,原来是用了非常多的java8的语法特性,重构了代码。用的最多的,就是map、flatMap之类的。  但是其他小伙伴不愿意了,虽然有的人感觉代码变的容易懂了,但有更多的人感觉代码变的很晦涩。  那感觉就像是:脱了裤子放屁,多此一举。  这些函数的作用域,根据级别,我觉得可以分为三类。简直是无所不在。  ...

随便推点

Linux三剑客awk、grep、sed详解_awk grep sed_LongtengGensSupreme的博客-程序员秘密

一、前言linux 有很多工具可以做文本处理,例如:sort, cut, split, join, paste, comm, uniq, column, rev, tac, tr, nl, pr, head, tail.....,学习 linux 文本处理的懒惰方式(不是最好的方法)可能是:只学习grep,sed和awk。 使用这三个工具,你可以解决近 99% linux 系统的文本处理问题,而不需要记住上面不同的命令和参数。:)而且,如果你已经学会并使用了三者,你就会知道其中的差异。实际上,这里的

软件测试职业发展规划_shaoshupai123的博客-程序员秘密

【原创】软件测试职业发展规划之前有同学问我软件测试工程师应该如何发展,感觉有些迷茫。问我什么时候应该学自动化?什么时候应该学性能?我是学习java好,还是学习html?还是python?下图,我给出了一个测试工程师5年的职业规划方案,从刚入行到资深测试工程师:整体职业规划分为4个阶段:阶段一(初级工程师):a. 工作年限一般在2年以内b. 基本技能:测试计划编写、测试用例设计、测...

awk命令_qq_52825616的博客-程序员秘密

目录一、awk命令的定义1、awk的命令原理2、awk的命令格式3、awk的内建变量二、awk命令的运用1、打印磁盘使用情况2、提取ip和mac地址3、根据列分割符提取4、使用BEGIN输出包含指定字符的行并统计有多行一、awk命令的定义1、awk的命令原理逐行读取文本,默认以空格或tab键为分割符进行分割,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令。sed命令常用于一整行的整理,而awk命令比较倾向于将一行分成多个“字段”然后再进

c#还真好用_xwpcom的博客-程序员秘密

这两天由于要和其他公司平台对接,对方只提供了c#和java sdk,最好后c#搞定,感觉c#还真好用

Spring @Resource、@Autowired的区别及其两者与@Qualifier结合使用的规则[email protected] required false_常写写代码的博客-程序员秘密

@[email protected]是JSR-250的一个注解,用与资源(通常是JNDI)的注入。Spring对其进行了支持。装配规则:如果指定了name属性,则按照name查找,找到且类型匹配则装配,否则配抛出异常 如果指定了name和type属性,则按照name和type精确查找,找到则装配,找不到抛出异常 如果仅指定了type属性,则按照type查找,如果只找到一个则装配,...

推荐文章

热门文章

相关标签