核心:

实例化对象,实现创建者和调用者的分离

简单工厂模式

工厂方法模式

抽象工厂模式

面对对象设计的基本原则:

ocp(open closed principle) 开闭原则:一个软件的实体应当对拓展开放,对修改关闭

dip(dependence inversion principle) 依赖反转原则:针对接口编程,不要针对实现编程

lod(law of demeter) demeter法则:只与你直接的朋友通信,避免与陌生人通信

简单工厂模式(Simple Factory Pattern):

public class Car {

}

public class Byd extends Car{

}

public class Audi extends Car{

}

public class CarFactory {
public static Car createCar(String type){
if("audi".equals(type)){
return new Audi();
}else if("byd".equals(type)){
return new Byd();
}else return null;
}
} public class Test {
public static void main(String[] args) {
Car c=CarFactory.createCar("奥迪"); }
}

UML图:

由于上述方法未实现开闭原则,则引入工厂方法模式(FactoryMethod)

工厂方法模式(Factory Method Pattern):

public class Car {

}

public class Audi extends Car{

}

public class Byd extends Car{

}

public interface CarFactory {
Car createCar();
} public class AudiFactory implements CarFactory{ @Override
public Car createCar() {
return new Audi();
} } public class BydFactory implements CarFactory{ @Override
public Car createCar() {
return new Byd();
} } public class Client {
public static void main(String[] args) {
Car c1=new AudiFactory().createCar();
Car c2=new BydFactory().createCar();
}
}

UML图:

结构复杂,但是但是容易扩展

抽象工厂模式(Abstract Factory Pattern):

产品族:用来生产不同产品族的全部产品

package com.littlepage.factoryPattern.abstractFactory;

public interface Engine {
void run();
void start();
} class LuxuryEngine implements Engine{ @Override
public void run() {
System.out.println("启动快");
} @Override
public void start() {
System.out.println("开始快");
} } class LowEngine implements Engine{ @Override
public void run() {
System.out.println("启动慢");
} @Override
public void start() {
System.out.println("开始慢");
} } package com.littlepage.factoryPattern.abstractFactory; public interface Seats {
void massage();
} class LuxurySeat implements Seats { @Override
public void massage() {
System.out.println("自动按摩");
} } class LowSeat implements Seats { @Override
public void massage() {
System.out.println("手动按摩");
} }
package com.littlepage.factoryPattern.abstractFactory; public interface Tyre {
void revolve();
} class LuxuryTyre implements Tyre{ @Override
public void revolve() {
System.out.println("旋转快");
} } class LowTyre implements Tyre{ @Override
public void revolve() {
System.out.println("旋转慢");
} }
package com.littlepage.factoryPattern.abstractFactory; public interface CarFactory {
Engine createEngine();
Seats createSeat();
Tyre createTyre();
} class LuxuryCarFactory implements CarFactory{ @Override
public Engine createEngine() {
return new LuxuryEngine();
} @Override
public Seats createSeat() {
return new LuxurySeat();
} @Override
public Tyre createTyre() {
return new LuxuryTyre();
} } class LowCarFactory implements CarFactory{ @Override
public Engine createEngine() {
return new LowEngine();
} @Override
public Seats createSeat() {
return new LowSeat();
} @Override
public Tyre createTyre() {
return new LowTyre();
} }
package com.littlepage.factoryPattern.abstractFactory; public class Client {
public static void main(String[] args) {
CarFactory factory=new LuxuryCarFactory();
Engine e=factory.createEngine();
e.start();
}
}

UML图(按照层级来看):

设计模式(四) Factory Pattern工厂模式的更多相关文章

  1. 一天一个设计模式——Abstract Factory抽象工厂模式

    一.模式说明 前面学习了工厂方法(Factory Method)模式.在工厂方法模式中,在工厂方法模式中,父类决定如何生成实例,但并不决定所要生成的具体类,具体的处理交由子类来处理.这里学习的抽象工厂 ...

  2. Factory Pattern(工厂模式)

    1.工厂模式简介 工厂模式,专门负责将大量有共同接口的类实例化(用来生产对象).其定义为定义一个用于创建对象的接口,让子类决定实例化那一个类.工厂方法使一个类的实例化延迟到其子类. 工厂模式拥有以下几 ...

  3. 设计模式之——Factory(工厂模式)

    工厂模式用于,通过统一的创建对象接口来创建对象,而子类可以决定对象的创建方式. class CObject { }; class CCar : public CObject { }; class CF ...

  4. 2.设计模式-Abstract Factory 抽象工厂模式

    大神勿喷,不对的地方请指出来,学笔记而已. 解决的问题:应对多系列对象构建的变化或多系列(例如:崎岖的山路和平坦的马路属于一个系列) 不断的变化的创建. 使用场景:对象不变(比如有3个对象 " ...

  5. 设计模式(一)工厂模式Factory(创建型)

    设计模式一 工厂模式Factory 在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.可是在一些情况下, new操作符直接生成对象会带来一些问题. ...

  6. 设计模式(一)工厂模式Factory(创建类型)

    设计模式一 工厂模式Factory 在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.可是在一些情况下, new操作符直接生成对象会带来一些问题. ...

  7. 设计模式(一)工厂模式Factory(创建型)(转)

    原文链接:http://blog.csdn.net/hguisu/article/details/7505909 设计模式一 工厂模式Factory 在面向对象编程中, 最通常的方法是一个new操作符 ...

  8. Java设计模式(1)工厂模式(Factory模式)

    工厂模式定义:提供创建对象的接口. 为何使用工厂模式 工厂模式是我们最常用的模式了,著名的Jive论坛,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见. 为什么工厂模式是如此常用?因 ...

  9. JAVA设计模式(二)工厂模式

    在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.但是在一些情况下, new操作符直接生成对象会带来一些问题.举例来说, 许多类型对象的创造需要一 ...

随机推荐

  1. js 迭代方法

    迭代方法 * every():对数组中的每一项运行给定函数,如果该函数对每一项都返回true,则返回true. * filter():对数组中的每一项运行给定函数,返回该函数会返回true 的项组成的 ...

  2. Django之富文本编辑器

    1.在虚拟环境中安装包. pip install django-tinymce==2.6.0 2.在配置文件中INSTALLED_APPS注册 3.配置富文本编辑器的宽高 4.配置编辑器url.

  3. 第二节 JavaScript基础

    JavaScript组成及其兼容性: ECMAScript:解释器,翻译,用于实现机器语言和高级语言的翻译器:几乎没有兼容性问题 DOM(Document Object Model):文档对象模型,文 ...

  4. selenium使用location定位元素坐标偏差

    python+selenium+Chromedriver使用location定位元素坐标偏差使用xpath定位元素,用.location获取坐标值,截取网页截图的一部分出现偏差. 之所以会出现这个坐标 ...

  5. percona-server-5.7.18-14安装

    说明 percona-server-5.7 的安装对硬件配置的要求较高,至少需要4G内存或者2G物理内存+2Gswap. 编译安装过程中注意所在分区的空间大小,编译安装需要使用到大量的临时空间. 环境 ...

  6. Docker学习笔记之从镜像仓库获得镜像

    0x00 概述 之前我们说到了,Docker 与其他虚拟化软件的一处不同就是将镜像管理纳入到了功能之中.实现虚拟化只是程序能够无缝移植的一部分,而有了镜像管理,就真正取代了我们在移植过程中的繁琐操作. ...

  7. php 版本号 整数化 mysql存储入库 比较大小【版本处理类,提供版本与数字互相转换】

    下载地址:https://download.csdn.net/download/a724008158/10659015

  8. 设置PhoenixOS进入图形界面

    phoenix操作系统很淡疼的一点就是每次启动都进入命令行界面,而且要想进入图形界面,每次都得配置. 开启虚拟机后,会出现引导界面,在虚拟机中连按2次“E”键进行编辑 输入参数“空格nomodeset ...

  9. Angular4.X 介绍

    Angular4.X 介绍 写在前面 为什么突然有想学习一点 angular 的知识呢?因为前几天突然在头条看到一个帖子,说,现在JavaScript成功的干过Java成为最火的编程语言,而JavaS ...

  10. fatal: unable to access 'https://github.com/open-falcon/falcon-plus.git/': Peer reports incompatible or unsupported protocol version

    git通过git clone下载github上的资源到机器上,结果出现如题所示的错误. [root@server data]# git clone https://github.com/pingcap ...