核心:

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

简单工厂模式

工厂方法模式

抽象工厂模式

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

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. Powerpoint 演示时定时提醒工具

    经常碰到这样的场景,规定的演讲报告时间所剩无几,甚至是已经超时,但演讲者并不知情,做为主持人只能从旁边轻轻的善意的提醒,但有时演讲者会没注意到主持人的提醒... 这里要介绍的就是这样一款用于提醒演讲者 ...

  2. Censor SCU - 4438

    frog is now a editor to censor so-called sensitive words (敏感词). She has a long text (p). Her job is ...

  3. Context initialization failed

    Context initialization failed org.springframework.beans.factory.BeanDefinitionStoreException: Invali ...

  4. 关于er模型中的identifying relationship or non-identifying relationship

    最近,主要负责项目管理和领域模型设计方面的工作,昨天在将UML类图转换为ER模型的时候,发现有identifying relationship or non-identifying relations ...

  5. unknown variable 'log_bin_basename'

    今天在处理一问题时,在my.cnf中设置了log_bin_basename=/DATA/log-bin,在启动时报unknown variable 'log_bin_basename' 经查mysql ...

  6. ACM札记

    1. 逗号表达式 在“计蒜客“的ACM教程中,看到这样一段很好的代码: int n; while (scanf("%d", &n), n) { //do something ...

  7. 13:python-ldap

    1.1 python-ldap 基本使用 11111111111111111111

  8. opencv学习之路(12)、图像滤波

    一.图像滤波简介 二.方框滤波——boxFilter() #include<opencv2/opencv.hpp> using namespace cv; void main(){ Mat ...

  9. thiniphp tp5 使用缓存

    在应用或者模块配置文件中配置好所用缓存的类型及相关参数: 如果是文件类型可以用 'cache' => [ 'type' => 'File', 'path' => CACHE_PATH ...

  10. topcoder srm 704 div1

    1.对于一棵树上的一个节点$u$,定义$f(u)$表示树上距离$u$最远的节点到$u$的距离.给出每个节点的$f$值,构造出这棵树. 思路:找到树的主干,然后不在主干上的节点一定可以连接到主干的某个节 ...