设计模式(四) 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操作符直接生成对象会带来一些问题.举例来说, 许多类型对象的创造需要一 ...
随机推荐
- Python进阶【第十一篇】模块(下)之常用模块
内置模块是Python自带的功能,在使用内置模块相应的功能时,需要[先导入]再[使用] 一.time模块 在Python中,通常有这几种方式来表示时间: 时间戳(timestamp):通常来说,时间戳 ...
- 图片转化成base64字符串
package demo; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; import java.io.*; public ...
- 每日linux命令学习-lsattr和chattr
lsattr和chattr命令 1. lsattr命令 作用: 显示文件属性 语法: lsattr [-adlRvV][files...] 参数: -a 显示所有文件和目录(包括隐藏文件)的属性. - ...
- AJAX(表单验证)/JSON之一
## 什么是Ajax AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML). 1. 异步通信:浏览器利用独立的线程与服务器进行通信, ...
- hdu some problems in Multi-University Training Contest
hdu 6103 Kirinriki #include<bits/stdc++.h> using namespace std; int n,m,ans; ]; void doit(int ...
- python的反射函数(hasattr()、getattr()、setattr()与delattr())和类的内置属性attr(__getattr()__、__setattr()__与__delattr()__)
主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省),有四个可以实现自省函数. hasattr(object,name) 判断object中是否有name字符串对应的属性或方法,返回Tr ...
- windows dhcp server
windows7并没有自带dhcp server的功能,需要安装额外的软件,软件很小巧,只有几百K字节,下载地址http://www.dhcpserver.de/cms/download/ 假设解压路 ...
- ORA-12052: cannot fast refresh materialized view
SQL> execute dbms_mview.refresh ('TX_FAIL_LOG_DAY_MV', 'f'); BEGIN DBMS_MVIEW.REFRESH ('TX_FAIL_L ...
- C# ms speech文字转语音例子
最近突发奇想 想玩玩 文字转语音的东东 谷歌了一下 发现微软有一个TTS 的SDK 查了查相关资料 发现 还真不错 然后就开始玩玩Microsoft Speech SDK的 DEMO了 ...
- PHP html mysql js 乱码问题,UTF-8(乱码)
一.HTML页面转UTF-8编码问题 1.在head后,title前加入一行: <meta http-equiv='Content-Type' content='text/html; chars ...