Java抽象工厂模式
Java抽象工厂模式
- 基本定义
抽象工厂模式是所有形态的工厂模式中最为抽
象和最其一般性的。抽象工厂模式可以向客户端
提供一个接口,使得客户端在不必指定产品的具
体类型的情况下,能够创建多个产品族的产品对
象。 - 编写具体代码以及测试类
package abstractFactory; public abstract class Apple implements Fruit { public abstract void get();
} package abstractFactory; public abstract class Banana implements Fruit { public abstract void get();
} package abstractFactory; public interface Fruit { public void get();
} package abstractFactory; public interface FruitFactory {
//实例化Apple
public Fruit getApple(); //实例化Banana
public Fruit getBanana();
} package abstractFactory; public class InnerApple extends Apple {
@Override
public void get() {
System.out.println("长在室内的苹果");
}
} package abstractFactory; public class InnerBanana extends Banana {
@Override
public void get() {
System.out.println("长在室内的香蕉");
}
} package abstractFactory; public class InnerFruitFactory implements FruitFactory {
@Override
public Fruit getApple() {
return new InnerApple();
} @Override
public Fruit getBanana() {
return new InnerBanana();
}
} package abstractFactory; public class NorthApple extends Apple { @Override
public void get() {
System.out.println("长在北方的苹果");
}
} package abstractFactory; public class NorthBanana extends Banana {
@Override
public void get() {
System.out.println("长在北方的香蕉");
}
} package abstractFactory; public class NorthFruitFactory implements FruitFactory {
@Override
public Fruit getApple() {
return new NorthApple();
} @Override
public Fruit getBanana() { return new NorthBanana();
}
} package abstractFactory; public class SouthApple extends Apple {
@Override
public void get() {
System.out.println("长在南方的苹果");
}
} package abstractFactory; public class SouthBanana extends Banana {
@Override
public void get() {
System.out.println("长在南方的香蕉");
}
} package abstractFactory; public class SouthFruitFactory implements FruitFactory {
@Override
public Fruit getApple() {
return new SouthApple();
} @Override
public Fruit getBanana() {
return new SouthBanana();
}
} //测试类
package abstractFactory; public class MainClass {
public static void main(String[] args) {
FruitFactory ff = new NorthFruitFactory();
Fruit apple = ff.getApple();
apple.get(); Fruit banana = ff.getBanana();
banana.get(); System.out.println("~~~~~~~~~~~~~~~~~~~~");
FruitFactory bb = new SouthFruitFactory();
Fruit apple2 = bb.getApple();
apple2.get(); Fruit banana2 = bb.getBanana();
banana2.get(); System.out.println("~~~~~~~~~~~~~~~~~~~~");
//比如要增加室内innerApple,InnerBanana
FruitFactory cc = new InnerFruitFactory();
Fruit apple3 = cc.getApple();
apple3.get();
Fruit banana3 = cc.getBanana();
banana3.get(); }
} 模式中包含的角色及其职责
1.抽象工厂(Creator)角色
抽象工厂模式的核心,包含对多个产品结构的声明,任何工厂类都必须实现这个接口。(FruitFactory)2.具体工厂( Concrete Creator)角色
具体工厂类是抽象工厂的一个实现,负责实例化某个产品族中的产品对象。(InnerFruitFactory,NorthFruitFactory,SouthFruitFactory)3.抽象(Product)角色
抽象模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。(Fruit)4.具体产品(Concrete Product)角色
抽象模式所创建的具体实例对象(NorthApple,NorthBanana,SouthApple,SouthBanana,InnerBanana,InnerFruitFactory)
总结:抽象工厂中方法对应产品结构,具体工厂对应产品族。- 具体和前面两节模式相比较图形,我整理出来如下图所示:
Java抽象工厂模式的更多相关文章
- Java 抽象工厂模式
抽象工厂模式(Abstract Factory Pattern)是工厂方法模式的进一步抽象,其英文原话"Provide an interface for creating families ...
- 设计模式(四)——Java抽象工厂模式
抽象工厂模式 1 基本介绍 1) 抽象工厂模式:定义了一个 interface 用于创建相关或有依赖关系的对象簇,而无需指明具体的类 2) 抽象工厂模式可以将简单工厂模式和工厂方法模式进行整合. 3) ...
- java 抽象工厂模式简单实例
抽象工厂模式:提供一个创建一系列的相关的或者依赖的对象的接口,无需指定它们的具体实现类,具体的时间分别在子类工厂中产生. 类似于工厂模式:隔离了具体类的生产实现,使得替换具体的工厂实现类很容易.包含有 ...
- Java设计模式(三) 抽象工厂模式
原创文章,同步发自作者个人博客,转载请注明出处 http://www.jasongj.com/design_pattern/abstract_factory/ 抽象工厂模式解决的问题 上文<工厂 ...
- JAVA设计模式--抽象工厂模式
抽象工厂设计模式 1.系统中有多个产品族,而系统一次只可能消费其中一族产品2.同属于同一个产品族的产品以其使用.来看看抽象工厂模式的各个角色(和工厂方法的如出一辙):抽象工厂角色: 这是工厂方法模式的 ...
- java设计模式(三)--抽象工厂模式
转载:http://zz563143188.iteye.com/blog/1847029 前面的工厂方法模式虽然清晰,但还是感觉有些繁琐,通常使用的还是抽象工厂模式. 工厂方法模式有一个问题就是,类的 ...
- java设计模式之抽象工厂模式
上一篇文章(http://www.cnblogs.com/liaoweipeng/p/5768197.html)讲了简单工厂模式,但是简单工厂模式存在一定的问题,如果想要拓展程序,必须对工厂类进行修改 ...
- 设计模式——抽象工厂模式及java实现
设计模式--抽象工厂模式及java实现 设计模式在大型软件工程中很重要,软件工程中采用了优秀的设计模式有利于代码维护,方便日后更改和添加功能. 设计模式有很多,而且也随着时间在不断增多,其中最著名的是 ...
- Java设计模式---工厂模式(简单工厂、工厂方法、抽象工厂)
工厂模式:主要用来实例化有共同接口的类,工厂模式可以动态决定应该实例化那一个类.工厂模式的形态工厂模式主要用一下几种形态:1:简单工厂(Simple Factory).2:工厂方法(Factory M ...
随机推荐
- 子查询 in 潜在的问题 - 建议最好别用
转至:http://wiki.lessthandot.com/index.php/Subquery_typo_with_using_in Subquery typo with using in Fro ...
- 2018.09.16 codeforces1041C. Coffee Break(双端队列)
传送门 真心sb题啊. 考场上最开始看成了一道写过的原题... 仔细想了一会发现看错了. 其实就是一个sb队列. 每次插入到队首去就行了. 代码: #include<bits/stdc++.h& ...
- 2018.08.05 bzoj3223: Tyvj 1729 文艺平衡树(非旋treap)
传送门 经典的平衡树问题,之前已经用splay写过一次了,今天我突发奇想,写了一发非旋treap的版本,发现挺好写的(虽然跑不过splay). 代码: #include<bits/stdc++. ...
- 破解Excel密码
https://zhidao.baidu.com/question/98055974.html 方法:1\打开文件2\工具---宏----录制新宏---输入名字如:aa3\停止录制(这样得到一个空宏) ...
- AutoCompleteTextView
在本节中作者只写了AutoCompleteTextView 和MutiAutoCompleteTextView 的用法,没有写怎样得到选中的值,我做了如下修改,增加按钮获取值赋值给TextView p ...
- 51Nod 1376 最长递增子序列的数量 (DP+BIT)
题意:略. 析:dp[i] 表示以第 i 个数结尾的LIS的长度和数量,状态方程很好转移,先说长度 dp[i] = max { dp[j] + 1 | a[i] > a[j] && ...
- HDU 2136 Largest prime factor (素数打表。。。)
题意:给你一个数,让你求它的最大因子在素数表的位置. 析:看起来挺简单的题,可是我却WA了一晚上,后来终于明白了,这个第一层循环不是到平方根, 这个题和判断素数不一样,只要明白了这一点,就很简单了. ...
- 最大连续子序列 -- hdu -- 1231
http://acm.hdu.edu.cn/showproblem.php?pid=1231 最大连续子序列 Time Limit: 2000/1000 MS (Java/Others) Mem ...
- Hdu1896 Stones(优先队列) 2017-01-17 13:07 40人阅读 评论(0) 收藏
Stones Time Limit : 5000/3000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other) Total Submis ...
- hdu3333 Turing Tree 2016-09-18 20:53 42人阅读 评论(0) 收藏
Turing Tree Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...