java设计模式--工厂模式
首先,简单工厂:
public class SimplePhoneFactory { public static Cellphone getCellphone(String type){
if("iPhone".equals(type)){
return new IPhone();
}else if("Samsung".equals(type)) {
return new Samsung();
}else {
throw new RuntimeException("没有正确的手机类型创建");
}
}
}
工厂方法:
/*
工厂方法接口
*/
public interface PhoneFactory {
public Cellphone getPhone();
}
/*
* @Description: iPhone 工厂
*/
public class IPhoneFactory implements PhoneFactory{ @Override
public Cellphone getPhone() {
// TODO Auto-generated method stub
return new IPhone();
} }
/*
* @Description:samsung工厂
*/
public class SamsungPhoneFactory implements PhoneFactory{ @Override
public Cellphone getPhone() {
// TODO Auto-generated method stub
return new Samsung();
} }
以上代码可以看出,每个产品都需要自己的实现工厂,这时如果我们需要新增加新产品,比如小米手机,只需要新增一个MIPhoneFactory来实现PhoneFactory即可。
抽象工厂:
public interface CPU {
void run();
void start();
}
//高端CPU
class GoodCUP implements CPU{ @Override
public void run() {
System.out.println("高端CPU运转方法。。。"); } @Override
public void start() {
System.out.println("高端CPU开始方法。。。"); } } //低端CPU
class BadCPU implements CPU{ @Override
public void run() {
System.out.println("低端CPU运转方法。。。"); } @Override
public void start() {
System.out.println("低端CPU开始方法。。。"); } }
然后是相机接口,以及相关的相机生产类型,其中的方法是随便写的。
public interface Camera {
public void take(); } class GoodCamera implements Camera{ @Override
public void take() {
System.out.println("高端相机拍照。。。"); } } class BadCamera implements Camera{ @Override
public void take() {
System.out.println("低端相机拍照。。。"); } }
最后一个内存的接口已经一系列类型:
public interface Memory { void work();
} class GoodMemory implements Memory{ @Override
public void work() {
System.out.println("高性能内存工作"); } }
class BadMemory implements Memory{ @Override
public void work() {
System.out.println("低性能内存工作"); } }
我们前面说了,抽象工厂就是利用一些列组件组合产品的工厂,上面我们写的CPU,相机,内存都是我们要组件手机的组件。现在,我们开始写我们的抽象工厂。当然为了方便,肯定要有工厂接口:
public interface AbPhoneFactory {
CPU getCPU();
Camera getCamera();
Memory getMemory();
}
然后,我们根据自己的需要,随机组合几种组件,即可得到我们的产品,当然这是一组(产品)组合出来的最终产品。
比如我们用好的CPU,好的内存,好的相机组合成一个好的手机:
public class GoodsPhoneFactory implements AbPhoneFactory{ @Override
public CPU getCPU() {
// TODO Auto-generated method stub
return new GoodCUP();
} @Override
public Camera getCamera() {
// TODO Auto-generated method stub
return new GoodCamera();
} @Override
public Memory getMemory() {
// TODO Auto-generated method stub
return new GoodMemory();
} }
也可以用差的CPU,差的内存,差的相机组合成比较差劲的手机:
public class BadPhoneFactory implements AbPhoneFactory{ @Override
public CPU getCPU() {
// TODO Auto-generated method stub
return new BadCPU();
} @Override
public Camera getCamera() {
// TODO Auto-generated method stub
return new BadCamera();
} @Override
public Memory getMemory() {
// TODO Auto-generated method stub
return new BadMemory();
} }
当然你也可以乱组合成中等的,这都是随你便了,只要加一个工厂实现即可。
最后,我们来总结一下吧:
对于单一产品,简单工厂更简单,但是新增产品时却很乏力,或者说不符合设计原则,而工厂方法是不修改原有类的前提下,新增工厂类实现,更符合设计原则。是不是我们在单一产品的时候就该选择工厂方法了呢?下面给出这么一个对比:
-- 结构复杂度 简单工厂更加简单 简单工厂优于工厂方法
-- 代码复杂度 工厂方法复杂度较高 简单工厂优于工厂方法
-- 客户端编程难度 工厂方法客户端需要了解更多的实现工厂 简单工厂优于工厂方法
-- 管理难度 工厂方法由于实现工厂类较多,管理更难 简单工厂优于工厂方法
结合以上四点,我们说简单工厂比工厂方法更加易用。这也就是开发时候简单工厂比工厂方法使用的更多的原因。
对于产品族,如果使用工厂模式,唯一的选择--抽象工厂。
OK,更多详细代码和本次测试代码请参考github:https://github.com/LiuJishuai/designPatterns。
java设计模式--工厂模式的更多相关文章
- 【设计模式】Java设计模式 -工厂模式
[设计模式]Java设计模式 -工厂模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习成长! 目 ...
- 一张图搞定Java设计模式——工厂模式! 就问你要不要学!
小编今天分享的内容是Java设计模式之工厂模式. 收藏之前,务必点个赞,这对小编能否在头条继续给大家分享Java的知识很重要,谢谢!文末有投票,你想了解Java的哪一部分内容,请反馈给我. 获取学习资 ...
- 10.Java设计模式 工厂模式,单例模式
Java 之工厂方法和抽象工厂模式 1. 概念 工厂方法:一抽象产品类派生出多个具体产品类:一抽象工厂类派生出多个具体工厂类:每个具体工厂类只能创建一个具体产品类的实例. 即定义一个创建对象的接口(即 ...
- 学习:java设计模式—工厂模式
一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类: 1)简单工厂模式(Simple Facto ...
- Java设计模式---工厂模式(简单工厂、工厂方法、抽象工厂)
工厂模式:主要用来实例化有共同接口的类,工厂模式可以动态决定应该实例化那一个类.工厂模式的形态工厂模式主要用一下几种形态:1:简单工厂(Simple Factory).2:工厂方法(Factory M ...
- java设计模式-工厂模式(springweb为例子)
一般而言,工厂模式分为3种,简单工厂模式,工厂方法模式,抽象工厂模式.这三种工厂模式逐层深入吧. 一,从springWeb.jar包使用抽象工厂模式的一个例子聊起 之前对spring各种痴迷,所以在需 ...
- java设计模式—工厂模式
一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类:1)简单工厂模式(Simple Factor ...
- Java设计模式——工厂模式
一.工厂模式分类 工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类: (1)简单工厂模式(Simp ...
- Java设计模式の工厂模式
-------------------------------------------------------- 目录: 一.序言 二.简单工厂模式 三.工厂方法模式 四.简单工厂和工厂方法模式的比 ...
- 1.Java设计模式-工厂模式
1.简单工厂模式(Factory Method) 常用的工厂模式是静态工厂模式,利用static修饰方法,作为一种类似于常见的工具类Utils等辅助效果,一般情况下工厂类不需要实例化. //1.定义一 ...
随机推荐
- C#排序比较
与C#定义了相等性比较规范一样,C#也定义了排序比较规范,以确定一个对象与另一个对象的先后顺序.排序规范如下 IComparable接口(包括IComparable接口和IComparable< ...
- iOS开发——高级技术精选&底层开发之越狱开发第二篇
底层开发之越狱开发第二篇 今天项目中要用到检查iPhone是否越狱的方法. Umeng统计的Mobclick.h里面已经包含了越狱检测的代码,可以直接使用 /*方法名: * isJailbroken ...
- 使用Object的wait,notify,notifyAll做线程调度
我们知道java中的所有类的祖先都是Object,Object类有四个个方法wait(),wait(long timeout),notify(),notifyAll(),这四个方法可以用来做线程的调度 ...
- Etl之HiveSql调优(left join where的位置)
一.前言 公司实用Hadoop构建数据仓库,期间不可避免的实用HiveSql,在Etl过程中,速度成了避无可避的问题.本人有过几个数据表关联跑1个小时的经历,你可能觉得无所谓,可是多次Etl就要多个小 ...
- java之接口interface
接口 1.多个无关的类可以实现同一个接口 2.一个类可以实现多个无关的接口 3.与继承关系类似,接口与实现类之间存在多态性 4.定义java类的语法格式 < modifier> class ...
- Android之TextView文字绘制流程
一:TextView的onDraw()方法: 1.第一句restartMarqueeIfNeeded()绘制字幕滚动. protected void onDraw(Canvas canvas) { r ...
- 为什么这样写js:(function ($) { })(jQuery);
很多时候,会这样写js,比如公司的项目里面的js页面都这样,所以我就想搞清楚意思: <script language="javascript" type="text ...
- JS中的constructor与prototype
http://www.cnblogs.com/qiantuwuliang/archive/2011/01/08/1930548.html 在学习JS的面向对象过程中,一直对constructor与pr ...
- java攻城狮之路(Android篇)--BroadcastReceiver&Service
四大组件:activity 显示. contentProvider 对外暴露自己的数据给其他的应用程序.BroadcastReceiver 广播接收者,必须指定要接收的广播类型.必须明确的指定acti ...
- 在ASP.NET开发中容易忽略的2个小问题
本文地址:http://www.cnblogs.com/outtamyhead/p/3642729.html,转载需保留本地址. 最近在我的MVC项目中出现了两个非常小,但是往往惹出大麻烦的问题,借中 ...