设计模式(四) Factory Pattern工厂模式
核心:
实例化对象,实现创建者和调用者的分离
简单工厂模式
工厂方法模式
抽象工厂模式
面对对象设计的基本原则:
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工厂模式的更多相关文章
- 一天一个设计模式——Abstract Factory抽象工厂模式
一.模式说明 前面学习了工厂方法(Factory Method)模式.在工厂方法模式中,在工厂方法模式中,父类决定如何生成实例,但并不决定所要生成的具体类,具体的处理交由子类来处理.这里学习的抽象工厂 ...
- Factory Pattern(工厂模式)
1.工厂模式简介 工厂模式,专门负责将大量有共同接口的类实例化(用来生产对象).其定义为定义一个用于创建对象的接口,让子类决定实例化那一个类.工厂方法使一个类的实例化延迟到其子类. 工厂模式拥有以下几 ...
- 设计模式之——Factory(工厂模式)
工厂模式用于,通过统一的创建对象接口来创建对象,而子类可以决定对象的创建方式. class CObject { }; class CCar : public CObject { }; class CF ...
- 2.设计模式-Abstract Factory 抽象工厂模式
大神勿喷,不对的地方请指出来,学笔记而已. 解决的问题:应对多系列对象构建的变化或多系列(例如:崎岖的山路和平坦的马路属于一个系列) 不断的变化的创建. 使用场景:对象不变(比如有3个对象 " ...
- 设计模式(一)工厂模式Factory(创建型)
设计模式一 工厂模式Factory 在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.可是在一些情况下, new操作符直接生成对象会带来一些问题. ...
- 设计模式(一)工厂模式Factory(创建类型)
设计模式一 工厂模式Factory 在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.可是在一些情况下, new操作符直接生成对象会带来一些问题. ...
- 设计模式(一)工厂模式Factory(创建型)(转)
原文链接:http://blog.csdn.net/hguisu/article/details/7505909 设计模式一 工厂模式Factory 在面向对象编程中, 最通常的方法是一个new操作符 ...
- Java设计模式(1)工厂模式(Factory模式)
工厂模式定义:提供创建对象的接口. 为何使用工厂模式 工厂模式是我们最常用的模式了,著名的Jive论坛,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见. 为什么工厂模式是如此常用?因 ...
- JAVA设计模式(二)工厂模式
在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.但是在一些情况下, new操作符直接生成对象会带来一些问题.举例来说, 许多类型对象的创造需要一 ...
随机推荐
- bind的封装
1.bind.call.apply三者的区别: 1)bind的返回值是一个函数体,不会被立即调用 2)call.apply会立即调用,第一个参数都是用来改变this的指向,两者的区别是前者传递参数的时 ...
- The Little Prince-12/05
The Little Prince-12/05 "When a mystery is too overpowering, one dare not disobey. Absurd as it ...
- 左移和右移运算符<< >>
左移的符号为<< 首先来个简单的例子 求8左移两位的值 8<<2 首先 将十进制的8转为二进制的数 倒序输出----> 1000 1000 左移两位 ...
- BeanCreationException: Error creating bean with name 'transactionManager' defined
BeanCreationException: Error creating bean with name 'transactionManager' defined in \WEB-INF\classe ...
- 启动项详解和更改deepin启动内核的方法
内容来自网上查找和总结以及自己的尝试 boot里面的启动项是根据其它文件生成的,如果改boot里面,会在你更新grub后再次回到原来的状态.(之后 我(有显卡驱动问题的用户)通过在开机时选择系统页面按 ...
- nginx 动态跨域配置
方法一: server { ..... set $cors_origin ""; if ($http_origin ~* "a.xxxx.com") { set ...
- git clone 报错Unable to negotiate with xxx.xxx.xxx.xxx port 12345: no matching key exchange method found. Their offer: diffie-hellman-group1-sha1
在执行git clone命令报错 Unable to negotiate with xxx.xxx.xxx.xxx port 12345: no matching key exchange metho ...
- Windows系统中设置Python程序定时运行方法
Windows系统中设置Python程序定时运行方法 一.环境 win7 + Python3.6 二.步骤 1,在Windows开始菜单中搜索“计划任务”,并且点击打开“计划任务”: 2.点击“创建基 ...
- 01:tcp/ip基本知识
1.1 tcp常识 1.网络七层 2.TCP三层握手 ####1.第一次握手 # 建立连接时,客户端发送SYN包到服务器,其中包含客户端的初始序号seq=x,并进入SYN_SENT状态,等待服务器确认 ...
- Codeforces 839C Journey - 树形动态规划 - 数学期望
There are n cities and n - 1 roads in the Seven Kingdoms, each road connects two cities and we can r ...