核心:

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

简单工厂模式

工厂方法模式

抽象工厂模式

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

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. 高级架构进阶之HashMap源码就该这么学

    引言--面试常见的问题 问:“你用过HashMap,你能跟我说说它吗?” “当然用过,HashMap是一种<key,value>的存储结构,能够快速将key的数据put方式存储起来,然后很 ...

  2. Spring/SpringMVC/MyBatis(持久层、业务层、控制层思路小结)

    准备工作: ## 7 导入省市区数据到数据库中 1. 从FTP下载SQL脚本文件 2. 把脚本文件移动到易于描述绝对路径的位置 3. 进入MySQL控制台 4. 使用`xxx_xxx`数据库 5. 运 ...

  3. P2617 Dynamic Rankings(树状数组套主席树)

    P2617 Dynamic Rankings 单点修改,区间查询第k大 当然是无脑树套树了~ 树状数组套主席树就好辣 #include<iostream> #include<cstd ...

  4. bzoj4720 / P1850 换教室(Floyd+期望dp)

    P1850 换教室 先用Floyd把最短路处理一遍,接下来就是重头戏了 用 f [ i ][ j ][ 0/1 ] 表示在第 i 个时间段,发出了 j 次申请(注意不一定成功),并且在这个时间段是否( ...

  5. 应使用sqlplus代替tnsping进行oracle连通性测试

    一直以来,都习惯于tnsping alias测试确定使用了那个sqlnet.ora,并测试连通性.最近在制作系统的安装包,为了轻量级以及提高实施效率,全部客户端使用oracle instant cli ...

  6. windows 10下oracle相关异常及处理方法

    话说起来,不以oracle性能优化,数据库维护为主业已经有四五年了,这两年基本上以mysql为主. pl/sql登录后提示空白对话框.将ORACLE_HOME设置为oracle 11g的目录. IMP ...

  7. 配置使用 git 秘钥连接 GitHub

    配置使用 git 秘钥连接 GitHub 在Linux下部署Git环境 1.安装Git. 使用命令安装 git . sudo apt-get install git 2.创建一个 Github 账号 ...

  8. Kali系列之Hydra/Medusa mysql密码爆破

    hydra hydra -L /home/chenglee/zidian/user.txt -P /home/chenglee/zidian/wordlist.TXT 192.168.137.133 ...

  9. ldap集成rabbitmq

    rabbitmq版本: 3.7.4 rabbitmq支持ldap需要开启插件:       rabbitmq-plugins enable rabbitmq_auth_backend_ldap rab ...

  10. Codeforces Round #481 (Div. 3)题解

    成功掉到灰,真的心太累了,orz!!!!,不是很懂那些国外大佬为什么每次都是20多分钟AK的,QAQ A. Remove Duplicates time limit per test 1 second ...