抽象工厂
来源:互联网 发布:中位数快速选择算法 编辑:程序博客网 时间:2024/06/05 18:51
抽象工厂
早就久闻抽象工厂的大名,以前查阅过很多资料,烦烦索索讲的很多,搞得人头晕脑胀,今天自己总结了一下。有什么不对希望指出。
抽象工厂的好处就是,新加的功能不需要对原有的代码进行改动,可以提升程序的可维护性。
先看如下代码:
package b811.action;//先生成一个动作接口,这里以"吃"的动作为例public interface Eat { //提供一个动作(吃)的接口,让别人去实现吃什么 void eat();}
接下来我们给Eat接口写出两个实现类。
1.
package b811.action.impl;import b811.action.Eat;public class EatApple implements Eat { //吃苹果 @Override public void eat() { System.out.println("eat apple"); }}
2.
package b811.action.impl;import b811.action.Eat;public class EatPear implements Eat { //吃梨 @Override public void eat() { System.out.println("eat pear"); }}
紧接着,我们写一个provider来控制工厂
package b811.action.provider;import b811.action.Eat; //通过provider来控制工厂public interface EatProvider { Eat action();}
然后开始生成我们的动作工厂来实现provider
吃苹果的
package b811.factory;import b811.action.Eat;import b811.action.impl.EatApple;import b811.action.provider.EatProvider;public class EatAppleFactory implements EatProvider { //创建吃苹果的工厂 @Override public Eat action() { return new EatApple(); }}
吃梨的
package b811.factory;import b811.action.Eat;import b811.action.impl.EatPear;import b811.action.provider.EatProvider;public class EatPearFactory implements EatProvider { //创建吃梨的工厂 @Override public Eat action() { return new EatPear(); }}
最后我们来测试一下
package b811.test;import b811.action.provider.EatProvider;import b811.factory.EatAppleFactory;public class Test {public static void main(String[] args) { //创建吃苹果的工厂 EatProvider provider = new EatAppleFactory(); //执行吃的动作 provider.action().eat();}}
好了,抽象工厂这样基本就完成了。接下来我们继续来看它是怎么不需要修改原有的代码添加新的功能。
现在又来了一大堆香蕉需要我们吃,那么很简单。
首先我们需要为Eat写一个实现类。
package b811.action.impl;import b811.action.Eat;public class EatBanana implements Eat { //吃香蕉 @Override public void eat() { System.out.println("eat banana!"); }}
然后我们为吃香蕉的动作产生一个工厂。写一个provider的实现类
package b811.factory;import b811.action.Eat;import b811.action.impl.EatBanana;import b811.action.provider.EatProvider;public class EatBananaFactory implements EatProvider { //创建香蕉的工厂 @Override public Eat action() { return new EatBanana(); }}
最后我们来测试一下刚才吃香蕉的动作
package b811.test;import b811.action.provider.EatProvider;import b811.factory.EatAppleFactory;import b811.factory.EatBananaFactory;public class Test {public static void main(String[] args) { //创建吃香蕉的工厂 EatProvider provider2 = new EatBananaFactory(); //执行动作 provider2.action().eat();}}
执行结果
eat banana!
完全没有修改我们之前写过的代码实现了自己的附加功能。
0 0
- 抽象工厂
- 抽象工厂
- 抽象工厂
- 抽象工厂
- 抽象工厂
- 抽象工厂
- 抽象工厂
- 抽象工厂
- 抽象工厂
- 抽象工厂
- 抽象工厂
- 抽象工厂
- 抽象工厂
- 抽象工厂
- 抽象工厂
- 抽象工厂
- 抽象工厂
- 抽象工厂
- Android viewpager
- Android 修改spinner 字体颜色 样式的方法
- 《剑指Offer》学习笔记--面试题29:数组中出现次数超过一半的数字
- RecyclerView 点击事件
- 机器学习中的算法(2)-支持向量机(SVM)基础
- 抽象工厂
- 解决 emulator-5554 disconnected !Cancelling错误
- java.jse--在java中调用python方法
- nginx简单配置动静分离
- sql查询记录行转列
- iOS 关于Blocks
- STL容器之 元素删除
- Mybatis1.2.2与spring4.1.6整合(附源码下载)
- Andrew NG 机器学习课程笔记(二)