研磨设计模式学习笔记1--简单工厂(SimpleFactory)
需求:实现一个简单工厂,客户端根据需求获取实现类。
简单工厂优点:
- 客户端不需要知道工厂内部实现,然组件外部实现面向接口编程。
 - 客户端、实现类解耦。
 
一、接口及实现类
//接口
public interface Api {
void say();
}
//实现类A
public class ImplA implements Api {
@Override
public void say() {
System.out.println("ImplA");
}
}
//实现类B
public class ImplB implements Api {
@Override
public void say() {
System.out.println("ImplB");
}
}
二、工厂
public class Factory {
    public static Api createApi() throws Exception{
        InputStream is = Client.class.getResourceAsStream("peizhi.properties");//配置文件中配置需要的实现类名称
        Properties properties = new Properties();
        properties.load(is);
        String className = (String) properties.get("impl");
        return (Api) Class.forName(className).newInstance();
    }
}
peizhi.properties内容:impl=pattern.simplefactory.ImplB(包名+实现类名)
tips:关于加载propertie一些小结 https://www.cnblogs.com/liuboyuan/p/9595412.html
客户端:
public class Client {
    public static void main(String[] args) throws Exception {
        Api api = Factory.createApi();
        api.say();//执行结果:ImplB
    }
}
研磨设计模式学习笔记1--简单工厂(SimpleFactory)的更多相关文章
- Java设计模式学习笔记(二) 简单工厂模式
		
前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 正文开始... 1. 简介 简单工厂模式不属于GoF23中设计模式之一,但在软件开发中应用也较为 ...
 - C#设计模式学习笔记:简单工厂模式(工厂方法模式前奏篇)
		
本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/7551373.html,记录一下学习过程以备后续查用. 一.引言 简单工厂模式并不属于GoF23里面的设计模式 ...
 - C#设计模式学习笔记:(2)工厂方法模式
		
本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/7567880.html,记录一下学习过程以备后续查用. 一.引言 接上一篇C#设计模式学习笔记:简单工厂模式( ...
 - Java设计模式学习笔记(四) 抽象工厂模式
		
前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 1. 抽象工厂模式概述 工厂方法模式通过引入工厂等级结构,解决了简单工厂模式中工厂类职责太重的问 ...
 - 设计模式学习(四): 1.简单工厂 (附C#实现)
		
New 这是一个典型的情况, 我们需要在运行时来实例化一些具体的类. 在需要修改或者扩展的时候我们就需要改这段代码. 一个程序中可能会多次出现类似的代码, 这使得维护和更新非常困难而且容易出错. 通过 ...
 - 研磨设计模式学习笔记4--单例模式Signleton
		
需求:加载配置文件,由于配置文件全局唯一,所以不用过多对象,建一个就可以了. 优点:单例模式本质就是为了控制实例数目. 一.饿汉式 public class Singleton { private S ...
 - 研磨设计模式学习笔记3--适配器模式Adapter
		
需求:制作一个日志管理系统,分为2个版本,第一版制作一个将日志存在本地文件的管理系统,第二版制作一个存储在数据库的管理系统,同时,第二版兼容第一版. 优点:可以复用现有功能,无需重新开发. 一.第一版 ...
 - 研磨设计模式学习笔记2--外观模式Facade
		
需求:客户端需要按照需求,执行一个操作,操作包括一个系统中的3个模块(根据配置选择是否全部执行). 外观模式优点: 客户端无需知道系统内部实现,,只需要写好配置文件,控制那些模块执行,简单易用. 外观 ...
 - C#设计模式学习笔记:(3)抽象工厂模式
		
本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/7596897.html,记录一下学习过程以备后续查用. 一.引言 接上一篇C#设计模式学习笔记:简单工厂模式( ...
 
随机推荐
- Blender 安装
			
Blender 安装 Blender 安装 windows 上安装 Blender 搞定 Ubuntu Linux 上安装 Blender 搞定 windows 上安装 Blender Step 1 ...
 - Mind  Map - FreeMind
			
FreeMind[1]是一款基于java的免费的脑图(mind mapping)制作与管理软件.FreeMind开发项目组正致力于使其成为一款高效率的工具.FreeMind具有一键“展开/折叠”功能以 ...
 - 算法Sedgewick第四版-第1章基础-023-MultiwordSearch.java
			
Multi-word search. Program MultiwordSearch.java reads a sequence of query words q[1], ..., q[k] from ...
 - CSS相关知识和经验的碎片化记录
			
1.子DIV块中设置margin-top时影响父DIV块位置的问题 解决办法1:若子DIV块中使用margin-top,则在父DIV块中添加:overflow:hidden; 解决办法2:在子DIV块 ...
 - Fast Scatter-Gather I/O
			
Some applications may need to read or write data to multiple buffers, which are separated in memory. ...
 - <超越死亡:恩宠与勇气>节选
			
我有一副身体,但我并非自己的身体.我可以看见并感觉到我的身体,然而凡是可以被看见以及被感觉到的,并不是真正的观者.我的身体也许疲惫或兴奋,生病或健康,沉重或轻松,也可能焦虑或平静,但这与内在的真我全然 ...
 - MVC5中的路由
			
[Route("dazhao/{id}")] [Route("xixi/index")] [Route("xiaohan")] public ...
 - C#多线程 线程嵌套调用问题
			
线程嵌套指的是:线程A的执行代码启动了线程B,线程B的执行代码又启动了线程C. 我原本以为线程A被Abort后,线程B会自动被Abort,但是我大错特错了. 在这种场景下,线程的管理就非常重要了. 线 ...
 - NPOI读取Excel文件
			
public class ExcelOperator { public static List<DataTable> Read(string fileName) { List<Dat ...
 - ffmpeg   windows下编译ffmpeg
			
windows下编译ffmpeg 今天由于工作需求需重新编译ffmpeg,百度,goole了一大堆,看眼花缭乱的,但几乎都是三种方案,大部分都是直接转发,一字不漏,错误的缺文件的还是照转,可是问题都大 ...