文章目录

  • 设计模式六大原则
    • 1. 开闭原则
    • 2. 里氏代换原则
    • 3. 依赖倒转原则
    • 4. 接口隔离原则
    • 5. 迪米特法则(最少知道原则)
    • 6. 合成复用原则
  • 工厂设计模式
    • 什么是工厂模式
    • 工厂模式的好处
    • 简单工厂模式
      • 介绍
      • 代码实现
      • 简单工厂的优缺点
      • 应用场景

因为单例设计模式和六大原则并不是很契合,所以,设计模式六大原则在这里进行简单介绍

设计模式六大原则

1. 开闭原则

开闭原则(Open Close Principle)就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点。

2. 里氏代换原则

里氏代换原则(Liskov Substitution Principle)面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。

3. 依赖倒转原则

依赖倒转原则(Dependence Inversion Principle)这个是开闭原则的基础,具体内容:真对接口编程,依赖于抽象而不依赖于具体。

4. 接口隔离原则

接口隔离原则(Interface Segregation Principle)的意思是:使用多个隔离的接口,比使用单个接口要好。还是一个降低类之间的耦合度的意思,从这儿我们看出,其实设计模式就是一个软件的设计思想,从大型软件架构出发,为了升级和维护方便。降低依赖,降低耦合。

5. 迪米特法则(最少知道原则)

迪米特法则(Demeter Principle)也叫最少知道原则,就是说:一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立。

6. 合成复用原则

合成复用原则(Composite Reuse Principle)是尽量使用合成/聚合的方式,而不是使用继承。

工厂设计模式

什么是工厂模式

工厂模式 简单来说就是 实现了创建者和调用者分离

工厂模式分为简单工厂模式、工厂方法模式、抽象工厂模式

工厂模式的好处

工厂模式是我们最常用的实例化对象模式,是使用工厂方法代替new操作的一种模式。

利用工厂模式可以降低程序的耦合性,为后期的维护修改提供了很大的便利。

将选择实现类、创建对象统一管理和控制。从而将调用者跟我们的实现类解耦。

简单工厂模式

介绍

简单工厂模式并不属于23种设计模式之一。

简单工厂模式相当于是一个工厂中有各种产品,创建在一个类中,客户无需知道具体产品的名称,只需要知道产品类所对应的参数即可。但是工厂的职责过重,而且当类型过多时不利于系统的扩展维护。

代码实现
// 定义一个工厂的类型(商品类)
public interface GoodsS {void goodsInfo();
}
// 工厂中生产的产品1(苹果)
public class AppleS implements GoodsS {@Overridepublic void goodsInfo() {System.out.println("simple...Apple...");}
}
// 工厂中生产的产品2(香蕉)
public class BananaS implements GoodsS {@Overridepublic void goodsInfo() {System.out.println("simple...banana...");}
}
// 工厂中生产的产品3(食用盐)
public class SaltS implements GoodsS {@Overridepublic void goodsInfo() {System.out.println("simple...salt...");}
}
// 生产产品的工厂(简单工厂模式)
public class SimpleFactory {public static GoodsS createGoodsS(String name) {GoodsS goodsS = null;if (!(name!=null && name.length()>0)) {return null;}switch (name) {case "apple" :goodsS = new AppleS();break;case "banana":goodsS = new BananaS();break;case "salt":goodsS = new SaltS();break;}return goodsS;}
}
// 客户通过工厂生产对应的产品,而不是直接和商品打交道
public class SimpleClient {public static void main(String[] args) {GoodsS apple = SimpleFactory.createGoodsS("apple");GoodsS banana = SimpleFactory.createGoodsS("banana");GoodsS salt = SimpleFactory.createGoodsS("salt");apple.goodsInfo();banana.goodsInfo();salt.goodsInfo();}
}
简单工厂的优缺点

优点:

  1. 简单工厂模式能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。
  2. 明确区分了各自的职责和权力,有利于整个软件体系结构的优化。
  3. 将“类实例化的操作”与“使用对象的操作”分开,让使用者不用知道具体参数就可以实例化出所需要的“产品”类,从而避免了在客户端代码中显式指定,实现了解耦。

缺点:

  1. 工厂类集中了所有实例(产品)的创建逻辑,一旦这个工厂不能正常工作,整个系统都会受到影响;
  2. 违背“开放 - 关闭原则”,一旦添加新产品就不得不修改工厂类的逻辑,这样就会造成工厂逻辑过于复杂。
  3. 简单工厂模式由于使用了静态工厂方法,静态方法不能被继承和重写,会造成工厂角色无法形成基于继承的等级结构。
应用场景
  1. 客户如果只知道传入工厂类的参数,对于如何创建对象的逻辑不关心时;
  2. 当工厂类负责创建的对象(具体产品)比较少时。

工厂设计模式

Java设计模式(三)工厂方法模式
Java设计模式(四)抽象工厂模式

Java设计模式(二)简单工厂模式—设计模式六大原则相关推荐

  1. Java设计模式之 简单工厂模式和工厂方法实验报告书

    目录 Java设计模式之 1 简单工厂模式和工厂方法实验报告书 1 实验四:简单工厂模式和工厂方法 2 一.实验目的 2 二.实验内容 2 三.实验步骤 2 3.1简单工厂模式:女娲 2 3.2简单工 ...

  2. 工厂模式 java场景_研磨设计模式之简单工厂模式(场景问题)

    简单工厂不是一个标准的设计模式,但是它实在是太常用了,简单而又神奇,所以还是需要好好掌握的,就当是对学习设计模式的热身运动吧.为了保持一致性,我们尽量按照学习其它模式的步骤来进行学习. 1  场景问题 ...

  3. Java设计模式之简单工厂模式实验(软件工程综合实践课程第二周)

    实验目的 1 .理解软件设计的相关理论 : 2 .理解面向对象设计原则: 实验内容 1 .简单工厂模式实验: (1) 参考讲义上的代码,利用简单工厂模式完成计算器应用程序: (2) 画出计算器程序简单 ...

  4. 设计模式之简单工厂模式(Java 实现)

    设计模式之简单工厂模式(Java 实现) 本文首发于http://www.imooc.com/wiki/Designlesson/factory.html 简单工厂模式是平时开发过程中最常见的设计模式 ...

  5. C#设计模式(2)——简单工厂模式

    一.引言 这个系列也是自己对设计模式的一些学习笔记,希望对一些初学设计模式的人有所帮助的,在上一个专题中介绍了单例模式,在这个专题中继续为大家介绍一个比较容易理解的模式--简单工厂模式. 二.简单工厂 ...

  6. .NET设计模式(1): 简单工厂模式

    .NET设计模式(1): 简单工厂模式 最近一直在看设计模式,想把自己的学习笔记与大家分享一下,如果能帮助大家的话,我会非常高兴,同时也欢迎大家指出里面的不足.园子里其实关于此类文章已经很多了,如果d ...

  7. 大牧絮叨设计模式:简单工厂模式

    文章目录 1. 简单工厂模式概述 1.1.简单工厂模式核心组件 1.2.简单工厂模式优缺点 2.` Java`实现 公共父类定义 产品具体实现类 简单工厂定义 代码运行测试: 3. `Python`实 ...

  8. php的类图怎么生成_PHP设计模式之简单工厂模式

    PHP设计模式之简单工厂模式 先从简单工厂入门,不管是面试还是被他人面试,在问到设计模式的时候,大多数人都会提到工厂模式.毫无疑问,工厂相关的几种模式在设计模式中是最出名的也是应用比较广泛的一种模式. ...

  9. JS常用的设计模式(2)——简单工厂模式

    JS常用的设计模式(2)--简单工厂模式 简单工厂模式是由一个方法来决定到底要创建哪个类的实例, 而这些实例经常都拥有相同的接口. 这种模式主要用在所实例化的类型在编译期并不能确定, 而是在执行期决定 ...

  10. 设计模式之简单工厂模式(C#版)

    设计模式之简单工厂模式(C#版) 简介 假设有个女朋友 总结 简介 我用最简洁而直接的方式来描述一下,什么是简单工厂模式.一句话就是,工厂类使用switch case语句返回特定类型. 下面,我们用一 ...

最新文章

  1. 【linux】top命令详解
  2. 【数字信号处理】相关函数应用 ( 相关函数应用场景 | 噪声中信号检测 | 隐含周期性检测 | 时差估计 | 描述随机信号 )
  3. jQuery 属性操作——案例:购物车案例模块
  4. php socket的一些问题
  5. OJ1010: 求圆的周长和面积
  6. postgresql 编写函数实现 获取中文姓名全拼
  7. 小米手机扩容教程_手机内存不够怎么办?扩容实记教给你 16G秒变64G
  8. 兄弟扫描机无法连接计算机,可以网络打印, 但是不能进行网络扫描。
  9. 用芯弹一首《大加洛普舞曲》:从AI-ISP,透视vivo的双芯之路
  10. 基于51单片机的计步器步数检测无线蓝牙APP上传方案原理图设计
  11. excel教程中daverage函数应用实例(一):统计部门平均工资
  12. JavaScript中的浅拷贝与深拷贝(手写浅拷贝和深拷贝)
  13. 好嗨游戏:LPL春季赛决赛在即,黑8传奇JDG迎战S8冠军IG
  14. 大悲寺——依教奉行溯正源,良苦用心谁人知?纵然世间一比丘,不退初心证菩提。[转]...
  15. 3DMax基础操作快捷键
  16. Windows 定制右键菜单
  17. P1365 WJMZBMR打osu! / Easy
  18. 复数有关概念以及拉氏变换的定义和常见变换
  19. 为心寻找漂泊中的归宿
  20. 物联网国赛LORA模块开发基础教程(通用库)—传感器

热门文章

  1. 腾讯位置服务--微信小程序JSSDK地图开发
  2. html模板转pdf
  3. 09.vue-charp-09 Render函数
  4. 耳机不分主从是什么意思_真无线蓝牙耳机为什么可以不分主副?哪款蓝牙耳机性价比高?...
  5. spring security oauth2
  6. 别让维权成为“奢侈品”
  7. oracle数据库同时实现联表查询和分页查询(未明确定义列)
  8. 13个Python小游戏,今天上班摸鱼玩了一天
  9. 带你了解手机群控 苹果免越狱群控系统是怎么实现的
  10. Day 23 - 前端开发工具 - HBuilder X