GOF23设计模式之工厂模式

时间:2022-09-11 22:50:48

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

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

  ·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&gt ...

随机推荐

  1. Java集合List模拟&OpenCurlyDoubleQuote;洗牌”操作

    Collection工具类为操作List集合提供了几个有用的方法: reverse().shuffle().sort().swap().rotate(). 小例子: 使用shuffle(),方法模拟洗 ...

  2. C&num;&lbrack;抽象类,接口&rsqb;

    Ⅰ.抽象类 1.抽象类.抽象方法 抽象类:通常情况下,它里面有抽象方法,类前面定义了一个abstract 抽象方法:只定义了方法的名称,没有定义方法的内容 2.为什么要使用抽象类.抽象方法? 都是为了 ...

  3. Android BLE 蓝牙低功耗教程,*BluetoothGatt和周边BluetoothGattServer的实现

    http://blog.csdn.net/wave_1102/article/details/39271693 分类: Android(105) 作者同类文章X Android4.3 规范了BLE的A ...

  4. Javascript中封装window&period;open的例子

    对window.open进行封装, 使其更好用, 且更兼容, 很多人说window.open不兼容,其实不是, 因为不能直接执行, 必须通过用户手动触发才行;看代码: 代码如下 复制代码 var op ...

  5. Xamarin开发Android笔记:背景操作

    使用Xamarin开发Android UI的时可能会遇到一些场景背景的问题,虽然可以利用多层或直接使用图片背景来完成,但这样会增加不少的资源消耗,最终导致内存溢出的情况.最好的方法还是利用内部方法或代 ...

  6. A Simple Problem with Integers&lpar;树状数组HDU4267&rpar;

    A Simple Problem with Integers Time Limit: 5000/1500 MS (Java/Others) Memory Limit: 32768/32768 K (J ...

  7. error&colon; qrc&lowbar;qml&period;obj&colon; requires unsupported dynamic reloc R&lowbar;ARM&lowbar;REL32&semi; recompile with -fPIC解决办法

    使用qtcreator加androidndk编译项目时报错: error: qrc_qml.obj: requires unsupported dynamic reloc R_ARM_REL32; r ...

  8. Redis与数据库同步问题

    缓存数据与持久化数据的一致性,这个问题总结了一下(看到了一个不错的博文),其实就是读和写,还有就是要注意谁先谁后的问题. Redis 是一个高性能的key-value数据库. redis的出现,很大程 ...

  9. mysql修改字符集

    文章链接:https://www.cnblogs.com/hubavyn/p/4359315.html mysql修改表.字段.库的字符集(转) 原文链接:http://fatkun.com/2011 ...

  10. hdu1208 dp

    题意:给了一个 n * n 的方格图,要从图的左上角走到右下角 ,每次只能向右或者向下走,走的格数为当前格子上的数字,问共有多少中走法. 一开始我看到之后觉得这题完全可以用记忆化搜索来做,dfs 一遍 ...