核心:

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

简单工厂模式

工厂方法模式

抽象工厂模式

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

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. 面试必问之JVM篇

    前言 只有光头才能变强 JVM在准备面试的时候就有看了,一直没时间写笔记.现在到了一家公司实习,闲的时候就写写,刷刷JVM博客,刷刷电子书. 学习JVM的目的也很简单: 能够知道JVM是什么,为我们干 ...

  2. Maven配置阿里云镜像仓库

    配置文件:D:\MyDev\Maven\apache-maven-3.0.5\conf\settings.xml <mirrors> <mirror> <id>al ...

  3. Eclipse Luna在线安装Maven时报错:Java heap space

    问题描述: 在线安装Maven插件时发生了:Java heap space 问题截图:

  4. Pytorch-学习记录 卷积操作 cnn output_channel, etc.

    参考资料: pytorch中文文档 http://pytorch-cn.readthedocs.io/zh/latest/

  5. Python基本数据类型——字典

    字典 dict 字典是Python的另一种有序的可变数据结构,且可存储任意类型对象. 字典是一种键值对的数据容器,每个键值(key:value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典 ...

  6. K8S学习笔记之Flannel解读

    0x00 概述 我们知道docker官方并没有提供多主机的容器通信方案,单机网络的模式主要有host,container,brige,none.none这种模式,顾名思义就是docker本身不去管理网 ...

  7. php+js 防止被抓包篡改数据,数据签名校验

    签名密钥,这个是自己生成的,需要客户端+服务端一致. <?php /** * 获取签名 * @param $data 提交的数据 * @param $key 安全密钥 * @return boo ...

  8. 0基础学安卓--初识安卓Activity

    知识储备:windows+ Android Studio 等环境安装. 安卓中Activity代表页的意思,也就是☞我们手机上当前的整个界面显示,点击按钮等操作可以跳转到另外一个Activity中. ...

  9. CentOS7 系统升级,删除centos7开机界面多余选,升级至最新的内核

    一:升级系统 1.检查系统版本: [root@localhost /]# cat /etc/redhat-release CentOS Linux release (Core) 2.运行yum命令升级 ...

  10. newcoder H肥猪(单调队列 / 线段树)题解

    题意: 小B来到了一个异世界,成为了肥猪之王. 在这个异世界,共有n种肥猪,编号分别为1,...,n. 小B希望集齐这n种肥猪. 召集肥猪有两种方式: 1. 花费a[i]的金币召唤一只编号为i的肥猪. ...