设计模式系列(二)工厂模式
来源:互联网 发布:linux如何切换账户 编辑:程序博客网 时间:2024/06/07 09:47
来来来,工厂模式!
需求:我们需要一个共享女友,这个女女可能是温柔的,也可能是彪悍的也可能是其他各种各样的
看到这个需求相信很多人会觉得直接new出来不就好了么,刚开始LZ也这样认为,但是自从学了工厂模式以后我就再也不那样写了。首先,工厂模式,仍然是望名思意,不就是一个大工厂么,对就是一个负责生产产品的工厂而已。
先来一个简单的实例:
public interface Girl {public void say();}public class Girl1 implements Girl {public void say(){System.out.println("人家很温柔的哦");}}public class Girl2 implements Girl {public void say(){System.out.println("你瞅啥,不服是吧!");}}有一个女孩的接口,她有一个说的方法。他的两个实现类分别说出了自己的性格,一个是温柔的,一个是彪悍的。虽然我们可能都喜欢温柔的,但是不排除有人喜欢彪悍的么,既然客户有这样的需求那么我们就得为客户提供一个女女工厂,他可以根据你的需求来生产你需要的女女
public class GirlFactory {/** * * @param type * @return根据传来的类型返回同类型的女孩 */public static Girl getGirl(String type){Girl girl=null;switch (type) {case "温柔":girl=new Girl1();break;case "彪悍":girl=new Girl2();break;default:System.out.println("暂时还没有这种类型的女女哦。。。。。。。。。。。");break;}return girl;}}这样的话作为客户他需要关心的只是在调用这个getGirl方法时传一个需要的类型type就行了
public class Main {public static void main(String[] args) {//简单工厂测试Girl girl1=GirlFactory.getGirl("温柔");girl1.say();Girl girl2=GirlFactory.getGirl("彪悍");girl2.say();}}就这样一个简单的工厂模式就这样OK了,是不是特别简单啊,不过这个还是有点小瑕疵,假如客户需要不属于以上两种类型,我们就需要再修改switch里的代码,这样就不符合我们的对修改关闭的原则了,于是又出现了一种抽象工厂模式:
同样的Girl接口,Girl1、Girl2实现类这里就不贴了,于简单工厂不同的是抽象工厂提供一个抽象的工厂接口,她对外暴露了创建不同女女的方法,同理如果某些人有特殊癖好,我们也可以提供一个ManFactoryInterface来提供男男的服务么
public interface GirlFactoryInterface {public Girl1 createSoftGirl();public Girl2 createDoughtyGirl();}
public class GirlFactoryImpl implements GirlFactoryInterface {@Overridepublic Girl1 createSoftGirl() {return new Girl1();}@Overridepublic Girl2 createDoughtyGirl() {return new Girl2();}}客户使用的时候只需要调用接口对外提供的方法就可以了
public class Main {public static void main(String[] args) {// 抽象工厂模式GirlFactoryInterface girlFactory = new GirlFactoryImpl();Girl girl1 = girlFactory.createSoftGirl();girl1.say();Girl girl2 = girlFactory.createDoughtyGirl();girl2.say();}}
在此奉上源码一份
好了,到此一个工厂模式的简单小例子就写完了,小伙伴们,你们get到了么?
阅读全文
0 0
- 设计模式系列(二)工厂模式
- 设计模式学习系列二:工厂模式
- 设计模式系列之二:工厂模式
- 设计模式系列(三)工厂模式
- 设计模式系列(10)工厂模式
- PHP设计模式-工厂系列(二)-工厂方法模式
- PHP设计模式-工厂系列(二)-工厂方法模式
- 设计模式(二)工厂方法模式+抽象工厂模式
- 设计模式(二)工厂模式:简单工厂模式
- 工厂模式----设计模式系列
- 设计模式系列-工厂模式
- 设计模式系列-工厂模式
- 设计模式(二)---工厂模式
- 设计模式-工厂模式(二)
- 设计模式(二)---工厂方法模式
- 设计模式(二):抽象工厂模式
- Java设计模式----工厂模式(二)
- 设计模式实践(二)工厂模式
- js增删改查列表
- 关于查询两种张表两列和并求两列和的和
- centOS7.2快速安装mysql
- Spark Streaming 学习笔记
- 关于HOSTS设置不生效的解决小方法
- 设计模式系列(二)工厂模式
- javascript Dom编程艺术读书笔记之最佳实践
- Maven创建SpringMVC项目Demo
- React Native 常用命令 <转>
- 小白科普:分布式和集群
- 首次使用博客写东西 nice!
- Linux内核动态调试信息的打开,如pr_debug
- phpcms跳转手机版
- 欢迎使用CSDN-markdown编辑器