引出工厂模式

package www.java.test;interface Computer{void printComputer();
}
class MacbookPro implements Computer{@Overridepublic void printComputer() {System.out.println("This is a MacbookPro");}
}
class SurfaceBook implements Computer{@Overridepublic void printComputer() {System.out.println("This is a Surfacebook");}
}
public class Test{//客户端public static void main(String[] args) {Computer computer = new MacbookPro();//子类为接口进行实例化处理computer.printComputer();}
}

如果我想买另外一款电脑,我就需要改变客户端的代码了,这就很麻烦了,所以我们就要想办法将实例化具体类的代码从客户端抽离(解耦到第三方),这时就需要用到工厂模式了。

简单工厂模式:用于没有产品族并且产品数量较少
专门定义一个类(第三方)用来创建其他类实例(解耦,将客户端创建对象的操作解耦到外部第三方类),被创建的实例通常都具有共同的父类。

package www.java.test;import java.util.Scanner;interface Computer{void printComputer();
}
class MacbookPro implements Computer{@Overridepublic void printComputer() {System.out.println("This is a MacbookPro");}
}
class SurfaceBook implements Computer{@Overridepublic void printComputer() {System.out.println("This is a Surfacebook");}
}
//第三方工厂类
class ComputerFactory{public static Computer getInstance(String type){if(type.equals("mac")){return new MacbookPro();}else if(type.equals("surface")){return new SurfaceBook();}return null;}
}
public class Test{//客户端public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("请输入你想要的电脑型号:");String type = scanner.nextLine();Computer computer = ComputerFactory.getInstance(type);computer.printComputer();}
}


假如现在我需要一个新型号的电脑,用了工厂设计模式之后,主方法是不需要改变的,只需要在工厂类中加一条分支就行(对应于我们现实生活中的工厂,也就是加一条生产线)。

package www.java.test;import java.util.Scanner;interface Computer{void printComputer();
}
class MacbookPro implements Computer{@Overridepublic void printComputer() {System.out.println("This is a MacbookPro");}
}
class SurfaceBook implements Computer{@Overridepublic void printComputer() {System.out.println("This is a Surfacebook");}
}
class AlienWare implements Computer{@Overridepublic void printComputer() {System.out.println("This is a AlienWare");}
}
//第三方工厂类
class ComputerFactory{public static Computer getInstance(String type){if(type.equals("mac")){return new MacbookPro();}else if(type.equals("surface")){return new SurfaceBook();}else if(type.equals("alienware")){return new AlienWare();}return null;}
}
public class Test{//客户端public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("请输入你想要的电脑型号:");String type = scanner.nextLine();Computer computer = ComputerFactory.getInstance(type);computer.printComputer();}
}


工厂方法模式----对应的是产品族
定义一个用来创建对象的接口,让子类决定实例化哪一个工厂。
我们需要加一个工厂接口,让不同的工厂类来实现这个接口。

package www.java.test;import java.util.Scanner;interface Computer{void printComputer();
}
class MacbookPro implements Computer{@Overridepublic void printComputer() {System.out.println("This is a MacbookPro");}
}
class SurfaceBook implements Computer{@Overridepublic void printComputer() {System.out.println("This is a Surfacebook");}
}
class AlienWare implements Computer{@Overridepublic void printComputer() {System.out.println("This is a AlienWare");}
}
interface ComputerFactory{Computer createCoputer();
}
class SurfaceFactory implements ComputerFactory{@Overridepublic Computer createCoputer() {return new SurfaceBook();}
}
class AppleFactory implements ComputerFactory{@Overridepublic Computer createCoputer() {return new MacbookPro();}
}
public class Test{//客户端public static void main(String[] args) {//假如我们现在需要苹果的产品//先拿到苹果的工厂ComputerFactory computerFactory = new AppleFactory();Computer computer = computerFactory.createCoputer();computer.printComputer();}
}

它与简单工厂的区别就在于多了一个抽象的工厂,多了很多具体工厂,以前是所有产品都在一个工厂中生产,而现在是不同产品在不同的工厂中生产。

还有一个升级的工厂模式:
抽象工厂—多个产品线混合
特点:提供一个创建一系列相关或相互依赖对象的接口(抽象工厂,多条产品线),而无需指定它们具体的类。

Java中的工厂设计模式相关推荐

  1. java设计模式工厂模式_Java中的工厂设计模式

    java设计模式工厂模式 Welcome to the Factory Design Pattern in Java tutorial. Factory Pattern is one of the C ...

  2. Java中的生成器设计模式

    Java 中的 Builder设计模式是一种创建模式,即用于创建对象,类似于 工厂方法设计模式 ,这也是创建设计模式. 在学习任何设计模式之前,我建议先找出特定设计模式要解决的问题. 众所周知, 必要 ...

  3. scala设计模式_Scala中的工厂设计模式

    scala设计模式 I'm going to deliver a series of Scala Design Patterns in my coming posts. I will pick-up ...

  4. 第80节:Java中的MVC设计模式

    第80节:Java中的MVC设计模式 前言 了解java中的mvc模式.复习以及回顾! 事务,设置自动连接提交关闭. setAutoCommit(false); conn.commit(); conn ...

  5. Java中的策略设计模式

    策略设计模式是一种行为模式,其中我们有多种算法/策略来完成一项任务,所使用的算法/策略留给客户选择. 各种算法选项封装在单独的类中. 在本教程中,我们将学习在Java中实现策略设计模式. UML表示形 ...

  6. Java中的命令设计模式

    在本教程中,我们将学习命令模式,这是一种重要的行为设计模式. 它具有一些重要的应用程序,例如在文本编辑器中实现撤消/重做功能. 在命令设计模式中,有一个命令对象位于发送方和接收方对象之间. 发送者对象 ...

  7. Java中的状态设计模式–示例教程

    状态模式是行为设计模式之一 . 当对象根据其内部状态更改其行为时,将使用状态设计模式. 如果必须根据对象的状态更改其行为,则可以在对象中使用状态变量,并使用if-else条件块根据状态执行不同的操作. ...

  8. Java中的Memento设计模式-示例教程

    记忆模式是行为设计模式之一 . 当我们要保存对象的状态以便以后可以恢复时,可以使用Memento设计模式. 记忆模式用于以这种方式实现该目的,即在对象外部无法访问该对象的已保存状态数据,从而保护了已保 ...

  9. Java中的访问者设计模式–示例教程

    访客模式是行为设计模式之一 . 当我们必须对一组相似类型的对象执行操作时,将使用访问者模式. 借助访问者模式,我们可以将操作逻辑从对象移动到另一个类. 例如,假设有一个购物车,我们可以在其中添加不同类 ...

最新文章

  1. LeetCode实战:螺旋矩阵
  2. C语言中二维指针,C语言中怎样区分一维指针和二维指针?
  3. 全球半导体产业迁移 中国的机遇与挑战
  4. Mysql 日志系统 redo log 和 binlog
  5. 在win7下将CapsLock按键变成esc
  6. 网络中的计算机如果加入家庭组,win10系统加入其他计算机家庭组的操作方法
  7. Thread.sleep() / Object.wait() / Condition.await() / LockSupport.park() / LockSupport.unpark() 区别
  8. ES8新特性_async和await结合发送ajax请求---JavaScript_ECMAScript_ES6-ES11新特性工作笔记051
  9. 何把SATA/RAID驱动集成到win xp 安装盘里?
  10. VMware下虚拟系统上网与互ping
  11. 织梦搜索结果增加dede:type、dede:arclist、dede:channelartlist、dede:tag等标签支持
  12. android 用platform.x509.pem platform.pk8对apk进行签名
  13. unipus iTEST考试助手---写脚本与反脚本的拉锯战
  14. rm——删除文件、文件夹
  15. 转载的一片关于Mapper.xml中sql的相关技术点,供以后自己慢慢学习之用
  16. java计算机毕业设计冠军体育用品购物网站MyBatis+系统+LW文档+源码+调试部署
  17. ajax post无效,jQuery AJAX Post无效
  18. 天源财富:室温下成功合成新型稳定有机化合物
  19. 论文插图用计算机绘制,论文中插图和表格的绘制种类
  20. 北航2022软件工程第三次作业——结对编程(最长英语单词链)

热门文章

  1. 听说Mysql你很豪横?-------------深入解析mysql数据库中的事务!
  2. RTKLIB 中的天线相位缠绕误差修正
  3. 大屏手机使用一个月有什么感觉?来看看它的魅力
  4. 在Unity中,PlayableBehaviour如何获取片段的开始和结束时间?
  5. vcscoverage
  6. En-Tan-Mo首席科学家Aaron Yuan:当所有人的权益接近的时候,区块链才是安全的
  7. JSON日期格式转换
  8. 【技术】烦死了,HTML 怎么转图片?
  9. 排序算法之快速排序(C语言)
  10. 《那些年啊,那些事——一个程序员的奋斗史》——105