linkin大话设计模式--抽象工厂
linkin大话设计模式--抽象工厂
在前面讲到的简单工厂里面虽然实现了我们那个类和其中的依赖的解耦,但是在产生我们需要的依赖的那个工厂里面还是和具体的产品类耦合了 现在要是还想彻底解耦的话怎么办呢? 就是在我们调用依赖的时候,传入一个参数,然后加入自己的判断这样子的话也就解耦了。在高一个层次就是把工厂也设计成接口和实现类,这样子的话调用一个工厂的工厂先产生一个工厂,然后再调用不同的工厂产生一个产品。貌似有点绕,忽忽,至少我现在不是很懂这样子设计的最大的益处。
代码如下:
<strong><span style="font-size:14px;">public class Computer {
//将其中的依赖设置成属性 注意其中的类型是接口
private Output out;
//默认的构造器 最好不要省略 不管用到不用到
public Computer(){
}
//属性注入的构造器 一般在使用简单工厂的时候 都是将其中的依赖作为输入注入 在spring中也可以使用set方法来注入
public Computer(Output out) {
super();
this.out = out;
}
public void out(){
out.outPrint();
}
public static void main(String[] args) {
OutputFactory out = OutputFactoryFactory.getOutputFactory("2");
Computer computer = new Computer(out.getOutput());
computer.out();
}
}
//这里将工厂也变成了接口 现在的设计就是编译时候类型全部都是接口
interface OutputFactory{
public Output getOutput();
}
class OutputFactory1 implements OutputFactory{
@Override
public Output getOutput() {
//实现了接口里面方法 产生对应的工厂的产品
return new Output1();
}
}
class OutputFactory2 implements OutputFactory{
@Override
public Output getOutput() {
//不同的工厂生产不同的实体产品
return new Output2();
}
}
//接口 在上面的Computer类中调用了一个依赖的方法 其中这个类型就是下面的接口的
interface Output{
public void outPrint();
}
class Output1 implements Output{
@Override
public void outPrint() {
System.out.println("output1...");
}
}
class Output2 implements Output{
@Override
public void outPrint() {
System.out.println("output2...");
}
}
class OutputFactoryFactory{
//曾经李刚老师说过说 要是没有太多的代码经验的话 设计模式纯属扯淡 其他的设计模式我可能还有体会 但是这个抽象工厂真心没有感觉 忽忽 反而有点复杂化了。。
//我个人暂时的认为 这里只不过是默认在调用一个依赖的时候不再直接new对象了 以后依赖重构的话这里的代码是不用动的 但是这样子的不停的实现接口 也没见得有多么简单
public static OutputFactory getOutputFactory(String outputFactoryType){
if("1".equalsIgnoreCase(outputFactoryType)){
return new OutputFactory1();
}else{
return new OutputFactory2();
}
}
}</span></strong>
很多时候,我们不需要纠缠简单工厂模式,抽象工厂模式这些概念,他们统称为工厂模式。
1、如果工厂直接生产被调用对象,那么就是简单工厂模式。
2、如果工厂生产了工厂对象,那么就升级成为了抽象工厂模式。
linkin大话设计模式--抽象工厂的更多相关文章
- linkin大话设计模式--简单工厂
linkin大话设计模式--工厂方法 什么是工厂方法:将多个类对象交给工厂来生成的设计被称为简单工厂模式,个人认为主要是为了实现解耦,在代码重构的时候会很重要. 代码如下: public class ...
- 大话设计模式--抽象工厂模式 Abstract Factory -- C++实现实例
1. 抽象工厂模式: 提供一个创建一系列相关或者相互依赖对象的接口,而无需指定他们具体的类. 下面是工厂方法模式: 下面是抽象工厂模式: 和工厂方法模式相比 抽象工厂模式可以有多个Product抽象, ...
- linkin大话设计模式--常用模式总结
linkin大话设计模式--常用模式总结 一,常用设计模式定义 Abstract Factory(抽象工厂模式):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. Adapter( ...
- linkin大话设计模式--建造模式
linkin大话设计模式--建造模式 建造模式是对象的创建模式,可以讲一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象. 建造模式的结构: 抽象建造者 ...
- linkin大话设计模式--模板方法模式
linkin大话设计模式--模板方法模式 准备一个抽象类,将部分逻辑以具体方法的形式实现,然后申明一些抽象方法来迫使子类实现剩余的逻辑.不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不 ...
- linkin大话设计模式--观察者模式
linkin大话设计模式--观察者模式 观察者模式定义了对象间的一对多依赖关系,让一个或者多个观察者观察一个对象主题.当主题对象的状态发生改变的时候,系统能通知所有的依赖于此对象的观察者对象,从而能自 ...
- linkin大话设计模式--桥接模式
linkin大话设计模式--桥接模式 桥接模式是一种结构化模式,他主要应对的是:由于实际的需要,某个类具有2个或者2个以上维度的变化,如果只是使用继承将无法实现功能,或者会使得设计变得相当的臃肿.我们 ...
- linkin大话设计模式--策略模式
linkin大话设计模式--策略模式 Strategy [ˈstrætədʒi] 策略 策略模式用于封装系列的算法,这些算法通常被封装在一个称为Context的类中,客户端程序可以自由的选择任何一种 ...
- 设计模式——抽象工厂模式及java实现
设计模式--抽象工厂模式及java实现 设计模式在大型软件工程中很重要,软件工程中采用了优秀的设计模式有利于代码维护,方便日后更改和添加功能. 设计模式有很多,而且也随着时间在不断增多,其中最著名的是 ...
随机推荐
- iOS开发的另类神器:libimobiledevice开源包【类似android adb 方便获取iOS设备信息】
简介 libimobiledevice又称libiphone,是一个开源包,可以让Linux支持连接iPhone/iPod Touch等iOS设备.由于苹果官方并不支持Linux系统,但是Linux上 ...
- Python模块学习------ 正则表达式
import re #f = open('data.txt','r') #for eachline in f.readlines(): #print re.split('\s\s+', eachlin ...
- 【可持久化线段树】POJ2104 查询区间第k小值
K-th Number Time Limit: 20000MS Memory Limit: 65536K Total Submissions: 61284 Accepted: 21504 Ca ...
- css中的相对定位与绝对定位
之前说过了CSS有三种基本的布局机制:普通流.浮动和绝对定位.除非专门指定,否则所有的框都在普通流中定位.而普通流中元素框的位置由元素在HTML中的位置决定. 相对定位 相对定位实际上被看做普通流定位 ...
- mysql导入数据load data infile用法整理
有时候我们需要将大量数据批量写入数据库,直接使用程序语言和Sql写入往往很耗时间,其中有一种方案就是使用MySql Load data infile导入文件的形式导入数据,这样可大大缩短数据导入时间. ...
- [转载]MySQL5.6 PERFORMANCE_SCHEMA 说明
背景: MySQL 5.5开始新增一个数据库:PERFORMANCE_SCHEMA,主要用于收集数据库服务器性能参数.并且库里表的存储引擎均为PERFORMANCE_SCHEMA,而用户是不能创建存储 ...
- HTTP 首部字段详细介绍
本文是HTTP解析系列第二篇,如果对http协议不是很了解,可以选去看第一篇:带新手走进神秘的HTTP协议,本文主要是对Http的首部字段进行详细解析. HTTP 协议的请求和响应报文中必定包含 HT ...
- 设备树的interrupt
http://www.cnblogs.com/targethero/p/5080499.html https://www.cnblogs.com/xiaojiang1025/p/6131381.htm ...
- Java入门篇(二)——Java语言基础(上)
本篇我们开始进入Java的学习,首先在学习如何编写Java语言前要先了解Java程序的基本结构. 一.Java程序的基本结构 一个Java程序的基本结构大体可以分为包.类.main()主方法.标识符. ...
- UVA 11636-Hello World!(水题,猜结论)
UVA11636-Hello World! Time limit: 1.000 seconds When you first made the computer to print the sentenc ...