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> ...
随机推荐
- autocomplete的使用
autocomplete使用分为本地调用方法和读取远程读取数据源的方法 (1)本地调用方法 <script src="Scripts/jquery-1.4.1.min.js" ...
- maven依赖查询地址
http://search.maven.org/#search%7Cga%7C1%7C
- Android Socket连接PC出错问题及解决
最近测试问题:Android 通过Socket链接电脑,ip和端口都是正确的,也在同一网段,可android端就是报异常如下: 解决办法:测试电脑的防火墙可能开着,在控制面板把防火墙打开即可.
- Linux下编译安装Vim8.0
什么是Vim? Vim 是经典的 UNIX 编辑器 Vi 的深度改良版本.它增加了许多功能,包括:多级撤销.格式高亮.命令行历史.在线帮助.拼写检查.文件名补完.块操作.脚本支持,等等.除了字符界面版 ...
- 通过Mono 在 Heroku 上运行 .NET 应用
英文原文:Running .NET on Heroku 中文原文:在 Heroku 上运行 .NET 应用 自从加入了Heroku之后,我就想在这个平台上运行.NET程序.现在我很高兴向大家宣布,我们 ...
- 分享一个CQRS/ES架构中基于写文件的EventStore的设计思路
最近打算用C#实现一个基于文件的EventStore. 什么是EventStore 关于什么是EventStore,如果还不清楚的朋友可以去了解下CQRS/Event Sourcing这种架构,我博客 ...
- 【完全开源】知乎日报UWP版:增加Live磁贴、Badge、以及Toast通知
目录 说明 实现方法 APP生命期 后台任务 说明 之前网上有人建议增加磁贴(tile).徽章(badge)功能.利用周末的时间,将这两个功能添加上去了.如果将磁贴固定到开始屏幕,磁贴就会循环播放首页 ...
- Go语言实战 - 我需要站内搜索
山坡网的用户抱怨"为什么搜索'二鬼子李富贵'找不到'二鬼子汉奸李富贵'?我用百度搜都能找到." 当时我就滴汗了,用户说的有道理,应该要能搜索到. 之前的方案很简单,用户输入的字串会 ...
- 完善Person页面的视图操作功能
经过上一篇,我们的person的权限已经正常加上了.那么我们回到我们的菜单类.给他重新加上权限. 这样的话,我们在启动页面的时候就不会看见联系人管理菜单了.只有登录后才可以看到菜单信息了. 添加控制器 ...
- WEB 基础知识(一)
1. 系统架构 1.1 B/S系统架构 1.2 C/S系统架构 1.3 对比与区别 1.3.1 概述 C/S结构,即Client/Server(客户机/服务器)结构,是大家熟知的软件系统体系结构,通过 ...