IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 设计模式的定义与分类、简单工厂模式 -> 正文阅读

[Java知识库]设计模式的定义与分类、简单工厂模式

1. 设计模式的定义与分类

设计模式是一套被反复使用、多数人知晓的、经过分类编目的,代码设计经验的总结,使用设计模式是为了可重用代码,让代码更容易被他人理解、提高代码的可读性。

1.1 设计模式的基本要素

  1. 模式名称
  2. 问题
  3. 解决方案
  4. 效果

1.2 设计模式的分类

  1. 创建型

主要用于创建对象,GoF提供了5种创建型的模式,分别是工厂方法模式、抽象工厂模式、建造者模式、原型模式和单例模式

  1. 结构型

主要用于处理类与对象的组合,GoF提供了7种结构型模型,分别是适配器模型、享元模型、桥接模式、组合模式、装饰模式、外观模式、代理模式

  1. 行为型

主要用于描述对象类或对象怎么样交互和怎么样分配职责,GoF提供了11种行为模型、分别是职责链模式、命令模式、解释器模式、迭代模式、中介者、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式、访问者模式

2. 简单工厂模式

在实际的软件开发过程中,有时候需要创建一些来自相同父类的类的实例,为此可以专门定义一个类来负责创建这些类的实例,这些被创建的实例具有共同的父类。

2.1 简单工厂模式结构与分析

简单工厂模式结构比较简单,其核心是工厂类。

包含的角色:

  • factory(工厂角色)

工厂角色即使工厂类,它是工厂模式的核心,负责实现所有实例的创建内部逻辑,工厂类可以被外界直接调用,所创建的产品对象,在工厂类中提供了静态工厂方法返回一个抽象的产品类,所有的具体产品都是抽象的。

  • product(抽象产品角色)

抽象产品是简单工厂模式所创建的所有对象的父类,负责描述所有实例共有的公共接口,它的引入将提高系统的灵活性。

  • ConcreteProduct(具体产品角色)

具体产品是工厂模式的创建目标,所有创建的对象都充当这个角色的某个具体类的实例。

2.2 实现

  • TV.java
package edu.simplFactory.bean;

/**
 * 电视
 * @author Administrator
 *
 */
public interface TV {
	public void play();
}

  • TVFactory
package edu.simplFactory.factory;

import edu.simplFactory.impl.HaierTV;
import edu.simplFactory.impl.HisenseTV;
import edu.simplFactory.bean.TV;

/**
 * 电视工厂
 * @author Administrator
 *
 */
public class TVFactory {
	public static TV create(String brand) throws Exception{
		if(brand.equalsIgnoreCase("Haier")){
			System.out.println("电视工厂生产海尔电视");
			return new HaierTV();
		}else if(brand.equalsIgnoreCase("Hisense")){
			System.out.println("电视工厂生产海信电视");
			return new HisenseTV();
		}else{
			throw new Exception("对不起,暂时无法生产该品牌电视");
		}
	}
}

  • haierTV.java
package edu.simplFactory.impl;

import edu.simplFactory.bean.TV;

/**
 * 海尔电视
 * @author Administrator
 *
 */
public class HaierTV implements TV{

	@Override
	public void play() {
		System.out.println("海尔电视播放中。。。");
	}
	
}

  • hisenseTV.java
package edu.simplFactory.impl;

import edu.simplFactory.bean.TV;

/**
 * 海信电视
 * @author Administrator
 *
 */
public class HisenseTV implements TV{

	@Override
	public void play() {
		System.out.println("海信电视播放中。。。");
	}

}

  • XMLUtils.java
package edu.simplFactory.utils;

import java.io.File;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

/**
 * XML辅助工具类
 * @author Administrator
 *
 */
public class XMLUtilTV {
	public static String getBrandName(){
		
		try{
			// 单例获取文档工厂对象
			DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();
			// 使用工厂对象创建构建文档对象
			DocumentBuilder builder = dFactory.newDocumentBuilder();
			// 文档对象
			Document doc;
			// 通过文档构建对象读取xml文件并创建文档对象
			doc = builder.parse(new File("configTV.xml"));
			// 根据节点名获取节点集
			NodeList nl = doc.getElementsByTagName("branName");
			// 获取第一个节点集的第一个节点
			Node firstChild = nl.item(0).getFirstChild();
			// 获取节点对象的值去除头尾空格
			String branName = firstChild.getNodeValue().trim();
			return branName;
		}catch (Exception e){
			e.printStackTrace();
			return null;
		}
	}
}

  • config.xml
<?xml version="1.0"?>
<config>
	<branName>Hisense</branName>
</config>
  • Client.java
package edu.simplFactory;

import edu.simplFactory.bean.TV;
import edu.simplFactory.factory.TVFactory;
import edu.simplFactory.utils.XMLUtilTV;

/**
 * 简单工厂模式测试
 * @author Administrator
 *
 */
public class Client {
	public static void main(String[] args) {
		try{
			TV tv;
			String brandName = XMLUtilTV.getBrandName();
			tv = TVFactory.create(brandName);
			tv.play();
		}catch(Exception e){
			e.printStackTrace();
		}
	}
}

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-03-06 12:48:23  更:2022-03-06 12:49:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:21:58-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码