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> ...
随机推荐
- StatePattern(状态模式)
/** * 状态模式 * @author TMAC-J * 状态模式和策略模式很像,其实仔细研究发现完全不一样 * 策略模式各策略之间没有任何关系,独立的 * 状态模式各状态之间接口方法都是一样的 * ...
- SharePoint 2016 入门视频教程
之前一直有朋友让自己录一些SharePoint的入门视频,之前没有太多时间,一个巧合的机会收到CSDN学院的邮件,可以在CSDN上发布视频教程,自己就录了一些.说起录视频也是蛮辛苦的,每天下班吃完饭要 ...
- Android开发学习—— Fragment
#Fragment* 用途:在一个Activity里切换界面,切换界面时只切换Fragment里面的内容* 生命周期方法跟Activity一致,可以理解把其为就是一个Activity* 定义布局文件作 ...
- 监控 SQL Server (2005/2008) 的运行状况
Microsoft SQL Server 2005 提供了一些工具来监控数据库.方法之一是动态管理视图.动态管理视图 (DMV) 和动态管理函数 (DMF) 返回的服务器状态信息可用于监控服务器实例的 ...
- 浅谈iptables 入站 出站以及NAT实例
--------------本文是自己工作上的笔记总结,适合的可以直接拿去用,不适合的,适当修改即可!--------------- iptbales默认ACCEPT策略,也称通策略,这种情况下可以做 ...
- linux yum命令详解
yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器.基於RPM包管理,能够从指定的服务器自动下载RP ...
- 【腾讯bugly干货分享】微信Android热补丁实践演进之路
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://bugly.qq.com/bbs/forum.php?mod=viewthread&tid=1264& ...
- Linux Socket 网络编程
Linux下的网络编程指的是socket套接字编程,入门比较简单.在学校里学过一些皮毛,平时就是自学玩,没有见识过真正的socket编程大程序,比较遗憾.总感觉每次看的时候都有收获,但是每次看完了之后 ...
- Speedment -- 利用lambda编写SQL
众所周知Java8中加入了lambda语法,这一特性也帮助Java开发者极大的简化了开发.Speedment是一个利用lambda表达式操作数据库的框架,相比Java世界中现在非常流行的mybatis ...
- Android开发学习之路-3DTouch效果模仿
3D Touch是什么效果的大家应该都知道了.什么?不知道,那也没办法呀,我也没有iPhone 6s演示给你看的. 本篇博客要做的效果图: 来个低质量动图: 这个动图效果不是很好,实际上模糊效果应该是 ...