GOF23设计模式之工厂模式
-实现了创建者和调用者的分离
-面向对象设计的基本原则:
·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设计模式之工厂模式的更多相关文章
- 【GOF23设计模式】工厂模式
来源:http://www.bjsxt.com/ 一.[GOF23设计模式]_简单工厂模式详解.面向对象设计原则.开闭原则.依赖反转原则.迪米特法则 没有工厂模式的情况 package com.te ...
- 【GOF23设计模式】--工厂模式
工厂模式: 实现了创建者调用者的分离 详细分类: 简单工厂模式 工厂方法模式 抽象工厂模式 面向对象设计的基本原则: OCP(开闭原则,Open-Closed Principle):一个软件的实体应当 ...
- GOF23设计模式之工厂模式(factory)
一.工厂模式概述 实现了创建者和调用者的分离 (1)分类 ①简单工厂模式 虽然某种程度不符合设计原则,但实际使用最多. ②工厂方法模式 不修改已有类的前提下,通过增加新的工厂类实现扩展. ③抽象工厂模 ...
- 设计模式——抽象工厂模式及java实现
设计模式--抽象工厂模式及java实现 设计模式在大型软件工程中很重要,软件工程中采用了优秀的设计模式有利于代码维护,方便日后更改和添加功能. 设计模式有很多,而且也随着时间在不断增多,其中最著名的是 ...
- 【GOF23设计模式】建造者模式
来源:http://www.bjsxt.com/ 一.[GOF23设计模式]建造者模式详解类图关系 建造飞船 package com.test.Builder; public class AirShi ...
- 5. 星际争霸之php设计模式--抽象工厂模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- 3. 星际争霸之php设计模式--简单工厂模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- iOS 设计模式之工厂模式
iOS 设计模式之工厂模式 分类: 设计模式2014-02-10 18:05 11020人阅读 评论(2) 收藏 举报 ios设计模式 工厂模式我的理解是:他就是为了创建对象的 创建对象的时候,我们一 ...
- 设计模式之工厂模式(Factory)
设计模式的工厂模式一共有三种:简单工厂模式,工厂模式,抽象工厂模式 简单工厂模式原理:只有一个工厂类,通过传参的形式确定所创建的产品对象种类 代码如下: #include <stdio.h> ...
随机推荐
- C#开发微信门户及应用(39)--使用微信JSSDK实现签到的功能
随着微信开逐步开放更多JSSDK的接口,我们可以利用自定义网页的方式来调用更多微信的接口,实现我们更加丰富的界面功能和效果,例如我们可以在页面中调用各种手机的硬件来获取信息,如摄像头拍照,GPS信息. ...
- ntp
一: 在一台可以连接外网的服务器A上配置ntp: 配置 /etc/ntp.conf 文件: server 202.120.2.101 # local clock (LCL) ...
- Flexible 弹性盒子模型之CSS flex-shrink 属性
实例 让第二个元素收缩到其他元素的三分之一: 效果预览 div:nth-of-type(2){flex-shrink:3;} 浏览器支持 表格中的数字表示支持该属性的第一个浏览器的版本号. 紧跟在 - ...
- 我的MYSQL学习心得(十一) 视图
我的MYSQL学习心得(十一) 视图 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...
- 【腾讯Bugly干货分享】微信终端跨平台组件 mars 系列(二) - 信令传输超时设计
本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:http://mp.weixin.qq.com/s/9DJxipJaaBC8yC-buHgnTQ 作者简介: ...
- Lesson 14 Do you speak English?
Text I had an amusing experience last year. After I had left a small village in the south of France. ...
- 关于bug分析与异常处理的一些思考
前言:工作三年了,工作内容主要是嵌入式软件开发和维护,用的语言是C,毕业后先在一家工业自动化控制公司工作两年半,目前在一家医疗仪器公司担任嵌入式软件开发工作.软件开发中,难免不产生bug:产品交付客户 ...
- SiteMap 提交,并使用正确的方式提交给搜索引擎
原创Sitemap收录介绍 对于网站中原创内容的网页url,站长可以将其制作成标准的Sitemap(站点地图)文件. 站长提交Sitemap文件后,好搜会使用Sitemap中的内容来了解网站结构等信息 ...
- Atitit 动态按钮图片背景颜色与文字组合解决方案
Atitit 动态按钮图片背景颜色与文字组合解决方案 转换背景颜色,setFont("cywe_img", fontScale, 50, 5) 设置文字大小与坐标 文字分拆,使用字 ...
- 应用OpenMP的一个简单的设计模式
小喵的唠叨话:最近很久没写博客了,一是因为之前写的LSoftmax后馈一直没有成功,所以在等作者的源码.二是最近没什么想写的东西.前两天,在预处理图片的时候,发现处理200w张图片,跑了一晚上也才处理 ...