-实现了创建者和调用者的分离

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

  ·OCP(开闭原则,Open-Closed Principle):一个软件的实体应当对扩展开放,对修改关闭

  ·DIP(依赖倒转原则,Dependence Inversion Principle):要针对接口编程,不要针对实现编程

  ·LoD(迪米特法则,Law of Demeter):只与你直接的朋友通信,而避免和陌生人通信

-核心本质:

  ·实例化对象,用工厂方法代替new操作

  ·将选择实现类、创建对象统一管理和控制。从而将调用者跟我们的实现类解耦

-详细分类:

  ·简单工厂模式:也被称之为静态工厂,用来生产同一等级结构中的任意产品。(对于增加新的产品,需要修改已有代码,但实际开发比较常用)

public interface Car {
public void run();
} public class Audi implements Car{
@Override
public void run() {
System.out.println("奥迪在跑!");
}
} public class Byd implements Car{
@Override
public void run() {
System.out.println("比亚迪在跑!");
}
} /**
* 简单工厂类,缺点:如果要添加新的车,不能扩展,只能修改原有的代码,违反了开闭原则
* @author XuZeSen
*
*/
public class CarFactory {
public static Car creatCar(String type){
Car c = null;
if("奥迪".equals(type)){
c = new Audi();
}
if("比亚迪".equals(type)){
c = new Byd();
}
return c;
}
}
public class Client {
public static void main(String[] args) {
Car car1 = CarFactory.creatCar("奥迪");
Car car2 = CarFactory.creatCar("比亚迪");
car1.run();
car2.run();
}
}

  ·工厂方法模式:用来生产同一等级结构中的固定产品。(支持增加任意产品,遵循了开闭原则,每次有新的车加入,只需添加一个新的工厂类即可,无需修改原有的代码,缺点:产品一多,类也不断增多了,不好管理)

public interface Car {
public void run();
} public class Audi implements Car{
@Override
public void run() {
System.out.println("奥迪在跑!");
}
} public class Byd implements Car{
@Override
public void run() {
System.out.println("比亚迪在跑!");
}
}

/**
* 工厂方法的共同接口,每次有新的产品,只需添加一个新的实现类即可,无需修改原有代码
* @author XuZeSen
*
*/

public interface CarFactory {
Car creatCar();
} public class AudiFactory implements CarFactory{
@Override
public Car creatCar() {
return new Audi();
}
} public class BydFactory implements CarFactory{
@Override
public Car creatCar() {
return new Byd();
}
} public class Client {
public static void main(String[] args) {
CarFactory carFactory1 = new AudiFactory();
Car car1 = carFactory1.creatCar(); CarFactory carFactory2 = new BydFactory();
Car car2 = carFactory2.creatCar(); car1.run();
car2.run();
}
}

  ·抽象工厂模式:用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族)

GOF23设计模式之工厂模式的更多相关文章

  1. 【GOF23设计模式】工厂模式

    来源:http://www.bjsxt.com/ 一.[GOF23设计模式]_简单工厂模式详解.面向对象设计原则.开闭原则.依赖反转原则.迪米特法则  没有工厂模式的情况 package com.te ...

  2. 【GOF23设计模式】--工厂模式

    工厂模式: 实现了创建者调用者的分离 详细分类: 简单工厂模式 工厂方法模式 抽象工厂模式 面向对象设计的基本原则: OCP(开闭原则,Open-Closed Principle):一个软件的实体应当 ...

  3. GOF23设计模式之工厂模式(factory)

    一.工厂模式概述 实现了创建者和调用者的分离 (1)分类 ①简单工厂模式 虽然某种程度不符合设计原则,但实际使用最多. ②工厂方法模式 不修改已有类的前提下,通过增加新的工厂类实现扩展. ③抽象工厂模 ...

  4. 设计模式——抽象工厂模式及java实现

    设计模式--抽象工厂模式及java实现 设计模式在大型软件工程中很重要,软件工程中采用了优秀的设计模式有利于代码维护,方便日后更改和添加功能. 设计模式有很多,而且也随着时间在不断增多,其中最著名的是 ...

  5. 【GOF23设计模式】建造者模式

    来源:http://www.bjsxt.com/ 一.[GOF23设计模式]建造者模式详解类图关系 建造飞船 package com.test.Builder; public class AirShi ...

  6. 5. 星际争霸之php设计模式--抽象工厂模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  7. 3. 星际争霸之php设计模式--简单工厂模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  8. iOS 设计模式之工厂模式

    iOS 设计模式之工厂模式 分类: 设计模式2014-02-10 18:05 11020人阅读 评论(2) 收藏 举报 ios设计模式 工厂模式我的理解是:他就是为了创建对象的 创建对象的时候,我们一 ...

  9. 设计模式之工厂模式(Factory)

    设计模式的工厂模式一共有三种:简单工厂模式,工厂模式,抽象工厂模式 简单工厂模式原理:只有一个工厂类,通过传参的形式确定所创建的产品对象种类 代码如下: #include <stdio.h> ...

随机推荐

  1. Android中Fragment与Activity之间的交互(两种实现方式)

    (未给Fragment的布局设置BackGound) 之前关于Android中Fragment的概念以及创建方式,我专门写了一篇博文<Android中Fragment的两种创建方式>,就如 ...

  2. 一个简单的网站web项目的详解

    有不对的术语,或者不好理解的部分,欢迎大家批评指正,谢谢大家! 近期做的网站web项目,实现登录功能,查询功能.首先把这个项目分为几个模块来处理,当前用户模块,历史用户模块,历史记录模块,数据库模块, ...

  3. linux-图形化远程管理协议

    远程管理控制方式: RDP(remote desktop protocol)协议: telnet: SSH(Secure Shell): RFB(Remote FrameBuffer)协议(图形化远程 ...

  4. Openfire阶段实践总结

    从3月开始研究Openfire,其实就是要做一套IM系统,也正是这个原因才了解到Openfire.之前还真没想过有这么多的开源产品可以做IM,而且也没想到XMPP这个协议竟然如何强大.看来还是标准为先 ...

  5. 一不小心写了个WEB服务器

    开场 Web服务器是啥玩意? 是那个托管了我的网站的机器么? No,虽然那个也是服务器,但是我们今天要说的Web服务器主要是指像IIS这样一类的,用于处理request并返回response的工具,没 ...

  6. TODO:一不顺眼就换字体Go之代码篇

    TODO:一不顺眼就换字体Go之代码篇 image包实现了一个基本的2D图像库,该包中包含基本的接口叫做image,这个里面包含color,这个将在image/color中描述:新增字体font,进行 ...

  7. mysql 列名中 包含斜杠或者空格的处理方式

    今天客户那边遇到了一个比较奇葩的问题跑来问我,这个问题比较冷门,所以特别记录下. 问题描述 数据库的字段存在斜杠或者空格的时候,怎么用sql进行insert或者select操作. 问题解答 对于这种特 ...

  8. 同步与异步 & 阻塞与非阻塞

    在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式: 一.同步 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用 ...

  9. 【Win 10 应用开发】UDP广播

    我们知道,对于UDP协议的通信,除了可以用来聊天外,可以发送广播数据.只要向广播地址的某个端口发送数据就可以进行广播,子网中只要监听该端口的socket就能收到广播消息. 最简单的方法就是向255.2 ...

  10. Python标准模块--asyncio

    1 模块简介 asyncio模块作为一个临时的库,在Python 3.4版本中加入.这意味着,asyncio模块可能做不到向后兼容甚至在后续的Python版本中被删除.根据Python官方文档,asy ...