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> ...
随机推荐
- MSYS2——Windows平台下模拟linux环境的搭建
最近从MSYS1.0迁移到了MSYS2.0,简单讲,MSYS2.0功能更强大,其环境模拟更加符合linux.虽然本身来自cygwin,但其集成了pacman软件管理工具,很有linux范,并且可以直接 ...
- SharePoint 2013管理中心里【管理服务器上的服务】不见了
打开管理中心,准备配置Managed Metadata Service,发现"管理服务器上的服务"不见了 那我自己拼url直接访问:http://xxxx/_admin/Serve ...
- JAVA的内存模型(变量的同步)
一个线程中变量的修改可能不会立即对其他线程可见,事实上也许永远不可见. 在代码一中,如果一个线程调用了MyClass.loop(),将来的某个时间点,另一个线程调用了MyClass.setValue( ...
- A/B Testing的简要知识
A/B testing主要用来检测网站或者APP的两个版本中哪一个更好,它的中心思想是把流量一分为二,一份用作experiment group,访问新的版本,另一份用作control group,访问 ...
- mysql 大表拆分成csv导出
最近公司有一个几千万行的大表需要按照城市的id字段拆分成不同的csv文件. 写了一个自动化的shell脚本 在/home/hdh 下面 linux-xud0:/home/hdh # lltotal 1 ...
- 前端开发小白必学技能—非关系数据库又像关系数据库的MongoDB快速入门命令(2)
今天给大家道个歉,没有及时更新MongoDB快速入门的下篇,最近有点小忙,在此向博友们致歉.下面我将简单地说一下mongdb的一些基本命令以及我们日常开发过程中的一些问题.mongodb可以为我们提供 ...
- windows系统路径环境变量
当前系统盘符%systemdrive%或%HOMEDRIVE%C:\ 当前系统目录%systemroot%或%Windir%C:\WINDOWS 当前用户文件夹%UserProfile%或%HOMEP ...
- 【一起学OpenFoam】02 软件准备
"工欲善其事必先利其器",在利用OpenFoam解决我们的工程问题之前,首先要做的事情是搭建一个OpenFoam运行环境.很遗憾的是,OpenFoam的原生开发系统是Linux,因 ...
- POJ3693 Maximum repetition substring [后缀数组 ST表]
Maximum repetition substring Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9458 Acc ...
- 数据分布转换:非正态 -> 正态
来源:丁香园论坛:SPSS上的把非正态分布数据转换为正态分布数据 一楼 可以应用变量变换的方法,将不服从正态分布的资料转化为非正态分布或近似正态分布.常用的变量变换方法有对数变换.平方根变换.倒数变换 ...