工厂模式

  • 实现了创建者和调用者的分离
  • 详细分裂:
    简单工厂模式
    工厂方法模式
    抽象工厂模式

面向对象设计的基本原则

  • OCP(开闭原则):一个软件实体应当对外开放,对修改关闭
  • DIP(依赖倒转原则):要针对接口编程,不要针对实现编程
  • LoD(迪米特原则):只与你直接朋友通信,而避免与陌生人通信.

简单工厂模式

定义一个接口Car

public interface Car {
void run();
}

实现类Audi

public class Audi implements Car {@Override
public void run() {
System.out.println("奥迪再跑!");
}}

实现类Byd

public class Byd implements Car {@Override
public void run() {
System.out.println("比亚迪再跑!");
}
}

测试类Client01,没有工厂模式的时候:

public class Client01 {   //调用者public static void main(String[] args) {Car c1 = new Audi();Car c2 = new Byd();c1.run();c2.run();}
}

添加一个工厂类CarFactory

  /*** 根据要的类型进行创建*/public static Car createCar(String type) {if (type.equals("奥迪")) {return new Audi();} else if (type.equals("比亚迪")) {return new Byd();}return null;}

工厂类也可以这样

public class CarFactory2 {public static Audi getAudi() {return new Audi();}public static Byd getByd() {return new Byd();}
}

测试类

public class testCa {@Testpublic void testCar() {Car car = new Audi();Car car1 = new Byd();car.run();car1.run();}@Testpublic void testCar1() {Car car = CarFactory.createCar("奥迪");Car car1 = CarFactory.createCar("比亚迪");car.run();car1.run();}@Testpublic void testCar2() {Car car = CarFactory2.getAudi();Car car1 = CarFactory2.getByd();car.run();car1.run();}
}

工厂模式

  • 实现了创建者和调用者的分离
  • 详细分裂:
    简单工厂模式
    工厂方法模式
    抽象工厂模式

面向对象设计的基本原则

  • OCP(开闭原则):一个软件实体应当对外开放,对修改关闭
  • DIP(依赖倒转原则):要针对接口编程,不要针对实现编程
  • LoD(迪米特原则):只与你直接朋友通信,而避免与陌生人通信.

简单工厂模式

定义一个接口Car

public interface Car {
void run();
}

实现类Audi

public class Audi implements Car {@Override
public void run() {
System.out.println("奥迪再跑!");
}}

实现类Byd

public class Byd implements Car {@Override
public void run() {
System.out.println("比亚迪再跑!");
}
}

测试类Client01,没有工厂模式的时候:

public class Client01 {   //调用者public static void main(String[] args) {Car c1 = new Audi();Car c2 = new Byd();c1.run();c2.run();}
}

添加一个工厂类CarFactory

  /*** 根据要的类型进行创建*/public static Car createCar(String type) {if (type.equals("奥迪")) {return new Audi();} else if (type.equals("比亚迪")) {return new Byd();}return null;}

工厂类也可以这样

public class CarFactory2 {public static Audi getAudi() {return new Audi();}public static Byd getByd() {return new Byd();}
}

测试类

public class testCa {@Testpublic void testCar() {Car car = new Audi();Car car1 = new Byd();car.run();car1.run();}@Testpublic void testCar1() {Car car = CarFactory.createCar("奥迪");Car car1 = CarFactory.createCar("比亚迪");car.run();car1.run();}@Testpublic void testCar2() {Car car = CarFactory2.getAudi();Car car1 = CarFactory2.getByd();car.run();car1.run();}
}

工厂方法模式

  • 汽车接口
public interface Car {void run();
}
  • 汽车工厂接口
public interface CarFactory {Car createCar();
}
  • 比亚迪车的实现
public class Byd implements Car {@Overridepublic void run() {System.out.println("比亚迪在跑!");}
}
  • 奥迪车的实现
public class Audi implements Car {@Overridepublic void run() {System.out.println("奥迪在跑!");}
}
  • 奥迪工厂实现

public class AudioFactory implements CarFactory {@Overridepublic Car createCar() {return new Audi();}
}
  • 比亚迪工厂实现
public class BydFactory implements CarFactory {@Overridepublic Car createCar() {return new Byd();}
}
  • 测试类
 Car car1=new AudioFactory().createCar();Car car2=new BydFactory().createCar();car1.run();car2.run();

注意:按照六大原则,简单工厂不符合开闭原则,因此, 根据设计理论建议:工厂方法模式,但是实际上,我们一般都是使用简单工厂模式!

抽象工厂模式

多个接口,构成了产品族的时候使用抽象工厂模式!

  • 创建引擎
public interface Engine {void run();void start();
}class HeightEngine implements Engine {@Overridepublic void run() {System.out.println("转的快!");}@Overridepublic void start() {System.out.println("启动快!可以自动启停!");}}class LowEngine implements Engine {@Overridepublic void run() {System.out.println("转的慢!");}@Overridepublic void start() {System.out.println("启动慢!");}
}
  • 创建座位

public interface Seat {void message();
}
class HeightSeat implements Seat {@Overridepublic void message() {System.out.println("可以自动按摩!");}
}
class LowSeat implements Seat {@Overridepublic void message() {System.out.println("不能按摩!");}
}
  • 创建轮胎
public interface Tyre {void revolve();
}class HeightTyre implements Tyre {@Overridepublic void revolve() {System.out.println("旋转不磨损!");}
}class LowTyre implements Tyre {@Overridepublic void revolve() {System.out.println("旋转磨损快!");}}
  • 汽车接口
public interface CarFactory {Engine createEngine();Seat createSeat();Tyre createTyre();
}
  • 创建高档汽车
public class HeightCarFactory implements CarFactory {@Overridepublic Engine createEngine() {return new HeightEngine();}@Overridepublic Seat createSeat() {return new HeightSeat();}@Overridepublic Tyre createTyre() {return new HeightTyre();}
}
  • 创建低等汽车

public class LowCarFactory implements CarFactory {@Overridepublic Engine createEngine() {return new LowEngine();}@Overridepublic Seat createSeat() {return new LowSeat();}@Overridepublic Tyre createTyre() {return new LowTyre();}
}
  • 测试
   Engine engine = new HeightCarFactory().createEngine();engine.run();engine.start();

总结:
1. 简单工厂:有两种表达方式,第一种就好比万能建车厂,客户要什么类型,如果有,就直接new car;第二种方式就好比建车厂现在只有这两种车(Byd,Audi),客户只能买这两种车
2.工厂方法模式:就是Audi有专门的Audi建造厂,Byd有专门的Byd建造厂,而每一个建造厂都有一个共同的建造厂,实现创建车
3.抽象工厂模式:多个接口,构造成的产品族,比如车有座椅,轮子,镜子,发动机

23中设计模式之工厂模式相关推荐

  1. Java中设计模式之工厂模式-4

    一.工厂模式由来 1)还没有工厂时代:假如还没有工业革命,如果一个客户要一款宝马车,一般的做法是客户去创建一款宝马车,然后拿来用. 2)简单工厂模式:后来出现工业革命.用户不用去创建宝马车.因为客户有 ...

  2. 23种设计模式——抽象工厂模式

    目录 抽象工厂模式(AbstractFactory) 产品族 理解 UML图 优缺点 应用场景 抽象工厂模式VS和工厂模式 实例 数据访问(工厂方法) 数据访问(抽象工厂) 用简单工厂改造抽象工厂 C ...

  3. 设计模式-策略模式和工厂模式结合使用

    怎么把策略模式和工厂模式结合起来使用 如果大家对策略模式和工厂模式不是很了解的话可以先看前面文章 策略模式:https://www.jianshu.com/p/958281936901 工厂模式:ht ...

  4. 设计模式---5(建造者模式的概念及其实现,建造者模式的角色与职责,建造者模式和工厂模式的区别)

    建造者模式 建造者模式的概念 Builder 模式也叫建造者模式或者生成器模式,是由 GoF 提出的 23 种设计模式中的一种. Builder 模式是一种对象创建型模式之一,用来隐藏复合对象的创建过 ...

  5. UML图解简单工厂模式工厂方法模式抽象工厂模式区别

    简述 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一: 工厂模式包含 简单工厂模式& 工厂方法模式& 抽象工厂模式这三种: 这三者主要区别在于工厂实现的 ...

  6. 软件设计模式之路-----工厂模式抽象工厂模式

    系统开发和现实生活是一样的.在现实生活中一个复杂的商品都是通过一个工厂产生,具体工厂怎么产生的我们不需在乎.在软件设计上也可如此,如果一个对象的创建过程比较复杂,便可考虑使用工厂模式. 简单工厂模式 ...

  7. 设计模式-创建型模式-简单工厂模式

    工程地址:设计模式-简单工厂源码-C++文档类资源-CSDN下载C++设计模式-创建型模式-简单工厂模式源码更多下载资源.学习资料请访问CSDN下载频道.https://download.csdn.n ...

  8. Java设计模式——创建者模式之工厂模式

    文章目录 2 工厂模式*** 2.1 概述 2.2 简单工厂模式*** 2.2.1 结构 2.2.2 实现 2.2.4 优缺点 2.2.3 扩展 2.3 工厂方法模式*** 2.3.1 概念 2.3. ...

  9. 【创建型模式】工厂模式

    在本教程中会介绍三种工厂的使用 简单工厂模式(不属于GOF的23种经典设计模式) 工厂方法模式 抽象工厂模式 1.案例 1.产品抽象类 package 工厂模式.简单工厂模式;public abstr ...

最新文章

  1. 实现统计一个字符串中的每个单词出现的次数--基于Go语言
  2. numpy np.sort()函数(指定对某一轴进行排序,返回数组的排序副本)(成对数组不要用这个排,用哪个啥lexsort()或argsort()都行)
  3. java编程赋值运算符_(24)赋值运算符
  4. 创建可按比例调整的布局的 Windows 窗体
  5. php转换图片为.bin文件
  6. 动态规划训练24 [Phalanx HDU - 2859 ]
  7. Truncated incorrect DOUBLE value: 'xxx'的解决方法
  8. 为SQL Server创建基于“智能”触发器的审核跟踪
  9. oracle执行外部sql_增强的PolyBase SQL 2019-Oracle DB的外部表
  10. (转)IDE 而言,是 Xcode 的技术比较先进还是 Visual Studio?
  11. C语言将字符串s连接到t的后面,下列给定程序中,函数fun的功能是:先将字符串s中的字符按正序存放到字符串t..._考试资料网...
  12. 计算机声卡电路分析,几款经典简单的声卡话筒功放电路分析
  13. 最全盘点:27类激光技术前沿应用
  14. codeforces 707c
  15. 已经更CSS《一篇文章让你从HTML零基础入门前端开发》12.22
  16. HIT-哈工大数据结构-作业4(C++)
  17. 5款非常好用的设计工具,推荐第一款在线设计工具
  18. 大数据开发第一站ODS篇
  19. 王者荣耀刷金币脚本,买英雄你还愁么?
  20. 全球与中国四甲基氢氧化铵市场深度研究分析报告

热门文章

  1. 接口隔离原则(Interface Segregation Principle,ISP)
  2. C语言之——整形、浮点家族
  3. 利用 Livox-SDK 解析 lvx 文件并在 CloudCompare 中显示
  4. ros中launch文件使用与虚拟机中使用Livox avia
  5. C语言初探——sizeof(数组名)与sizeof(*数组名)
  6. FM收音机 Spirit FM Radio v20110926 完整破解[汉化]版 支持RDS功能的收音机
  7. 查看显卡支持的CUDA版本号 CUDA与显卡驱动版本
  8. epoll原理以及优点
  9. 一只顽猴想要从山脚爬到山顶
  10. win8打印机显示服务器脱机,win8打印机脱机怎么处理,win8打印机脱机状态怎么解除...